HDU - 1548 基礎bfs
阿新 • • 發佈:2018-11-10
將本題作為bfs模板
#include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; const int maxn = 305; int n, a, b; typedef struct node { int f; int s; node(int ff, int ss) { f = ff; s = ss; } }node; int arr[maxn]; bool vis[maxn]; queue<node> q; int ans; void init() { ans = 0; memset(vis, false, sizeof(vis)); while (!q.empty()) q.pop(); } void bfs() { q.push(node(a, 0)); vis[a] = true; while (!q.empty()) { node x = q.front(); q.pop(); if (x.f == b) { ans = x.s; return ; } int xx; xx = x.f + arr[x.f]; if (!vis[xx] && xx > 0 && xx <= n) { vis[xx] = true; q.push(node(xx, x.s + 1)); } xx = x.f - arr[x.f]; if (!vis[xx] && xx > 0 && xx <= n) { vis[xx] = true; q.push(node(xx, x.s + 1)); } } } int main() { while (scanf("%d", &n) != EOF && n) { scanf("%d%d", &a, &b); for (int i = 1; i <= n; i++) scanf("%d", &arr[i]); init(); if (a == b) printf("0\n"); else { bfs(); if (ans) printf("%d\n", ans); else printf("-1\n"); } } return 0; }