第二次因为queue设为全局变量而WA,仅仅变了下顺序就A,真是搞不懂嘛意思。
这道题让我们懂得了bfs不止可以处理迷宫= =。
基础题速度必须要上来了。
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
const int N = 209;
const int INF = 1000000;
int Map[N];
bool vis[N];
int st, ed, n;
int dir[2] = {1, -1};
struct node
{
int x;
int step;
};
bool check(int x)
{
if(x > 0 && x <= n && !vis[x]) return true;
else return false;
}
int bfs()
{
queue <node> q;
node s_pos;
s_pos.x = st;
s_pos.step = 0;
vis[s_pos.x] = 1;
q.push(s_pos);
if(st == ed) return 0;
while(!q.empty())
{
node tmp = q.front();
q.pop();
for(int i = 0; i < 2; i ++)
{
node tmp2;
tmp2 = tmp;
tmp2.x += dir[i] * Map[tmp2.x];
tmp2.step += 1;
if(check(tmp2.x))
{
if(tmp2.x == ed) return tmp2.step;
vis[tmp2.x] = 1;
q.push(tmp2);
}
}
}
return -1;
}
int main()
{
// freopen("in.txt", "r", stdin);
while(~scanf("%d%d%d", &n, &st, &ed) && n)
{
for(int i = 1; i <= n; i ++)
cin >> Map[i];
memset(vis, 0, sizeof(vis));
printf("%d\n", bfs());
}
return 0;
}