标签:bfs
背景:1.编译错误:next和系统命名冲突。2.wa:起点大于楼层的情况未考虑。wawawa了一下午,我把走过就把内容设为-1的方法,改为由flag数组标记是否访问就对了。然后实验,把访问过的标记为-100000,也ac!!!说明题目中ki存在小于0的情况!!!!!存在-1!!!!!与题意不符!!wa了一下午。。。
我的代码:
#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; int floor[299],n,e; struct state{int x,count;}now,next1; void bfs(state temp){ queue<state> q; temp.count=0; q.push(temp); while(!q.empty()){ now=q.front(); if(now.x == e){ printf("%d\n",now.count); return; }else{ if(floor[now.x]){ next1.x=now.x+floor[now.x]; if(next1.x >= 1 && next1.x <= n && floor[next1.x]!= -1000000 ){ next1.count=now.count+1; q.push(next1); } } if(floor[now.x]){ next1.x=now.x-floor[now.x]; if(next1.x >= 1 && next1.x <= n && floor[next1.x] != -1000000){ next1.count=now.count+1; q.push(next1); } } floor[now.x]=-1000000; q.pop(); } } printf("-1\n"); return; } int main(void){ while(scanf("%d",&n),n){ scanf("%d%d",&now.x,&e); memset(floor,-1000000,sizeof(floor)); for(int i=1;i <= n;i++) scanf("%d",&floor[i]); if(now.x < 1 || now.x > n) printf("-1\n"); else bfs(now); } return 0; }
标签:bfs
原文地址:http://blog.csdn.net/jibancanyang/article/details/44176259