水水的BFS,但是开始的时候把判断放在了输入得前面 WA了无数次。。。。。真是神志不清。。。。。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
typedef struct{
int location;
int step;
}Node;
int N, A, B;
int maps[210];
bool visit[210];
int moves[2] = { 1, -1 };
int BFS(){
queue<Node> q;
Node start;
start.location = A;
start.step = 0;
q.push( start );
visit[A] = true;
while( !q.empty() ){
Node n = q.front();
q.pop();
for( int i = 0; i < 2; i++ ){
Node next = n;
next.location += moves[i] * maps[n.location];
next.step++;
if( next.location < 1 || next.location > N || visit[next.location] ){
continue;
}
if( next.location == B ){
return next.step;
}
visit[next.location] = true;
q.push( next );
}
}
return -1;
}
int main(){
while( cin >> N && N ){
cin >> A >> B;
for( int i = 1; i <= N; i++ ){
cin >> maps[i];
}
if( A == B ){
cout << 0 << endl;
continue;
}
if( A < 1 || A > N || B < 1 || B > N ){
cout << -1 << endl;
}
memset( visit, false, sizeof( visit ) );
cout << BFS() << endl;
}
return 0;
}