都说人间自有真情在,这道题写的我都快没有爱了。
if(num[begin]&&!visited[begin]&&(begin + num[begin] >=1)&&(begin + num[begin] <= N)){
Q[tail++] = begin + num[begin];
}
if(num[begin]&&!visited[begin]&&(begin - num[begin] <=N)&&(begin - num[begin] >= 1)){
Q[tail++] = begin - num[begin];
}
visited[begin] = 1;
刚开始因为入队这一段代码写的有问题,让我调了,几个小时。连半年前的代码都过了,现在居然过不去,好丢人呢
![尴尬](http://static.blog.csdn.net/xheditor/xheditor_emot/default/awkward.gif)
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
#include <stdio.h>
#include <string.h>
int num[220];
int Q[400],head,tail,add_step_flag;
int visited[220];
int step;
int N,fr,to;
void bfs(int begin){
if(begin == to) {
return;
}else{
if(num[begin]&&!visited[begin]&&(begin + num[begin] >=1)&&(begin + num[begin] <= N)){
Q[tail++] = begin + num[begin];
}
if(num[begin]&&!visited[begin]&&(begin - num[begin] <=N)&&(begin - num[begin] >= 1)){
Q[tail++] = begin - num[begin];
}
visited[begin] = 1;
++head;
if(head == add_step_flag){
++step;
add_step_flag = tail;
}
if(head == tail){
num[0] = 0;
return ;
}
bfs(Q[head]);
}
}
int main(int argc, char *argv[])
{
//FILE *fp;
//fp = freopen("in.txt","r",stdin);
while(scanf("%d",&N),N){
scanf("%d%d",&fr,&to);
memset(num,-1,sizeof(num));
for(int i = 1;i <= N;++i){
scanf("%d",&num[i]);
}
memset(visited,0,sizeof(visited));
head = 0;
tail = 1;
add_step_flag = tail;
num[0] = 1;
Q[head] = fr;
step = 0;
if(fr >N||fr<1||to>N||to<1){
printf("-1\n");
}else{
bfs(Q[head]);
if(num[0]||(fr == to)){
printf("%d\n",step);
}else{
printf("-1\n");
}
}
}
return 0;
}