[题解]洛谷P1135 奇怪的电梯
思路:
DFS会TEL
广度优先搜索
1.每次取当前楼层上下两种情况,判断是否合法
2.因为是bfs所以如果遍历到一个节点已经走到过则是无意义的
3.所以path只要直接更改即可
代码:
#include<cstdio> #include<queue> using namespace std; int ans=0,k[201],a,b,n,vis[201]={0},found=0,path[10010]; void bfs(){ int d[201]={0}; queue<int>q; q.push(a); //path[a]=-1; while(!q.empty()){ int nn=q.front();q.pop(); int up=nn+k[nn],down=nn-k[nn]; if(nn==b){printf("%d",d[b]);found=1;break;} if(vis[up]==0&&up>=1&&up<=n){ vis[up]=1;q.push(up);d[up]=d[nn]+1; } if(vis[down]==0&&down>=1&&down<=n){ vis[down]=1;q.push(down);d[down]=d[nn]+1; } } } int main(){ scanf("%d%d%d",&n,&a,&b); for(int i=1;i<=n;i++) scanf("%d",&k[i]); bfs(); if(!found)printf("-1"); }
本篇文章为SHINE_GEEK原创,转载请注明来源!
-------------------------------------
签名:自己选的路,跪着也要走完;理想的实现,需要不懈奋斗!
-------------------------------------
written_by:SHINE_GEEK
blog_addr:www.cnblogs.com/sjrb
-------------------------------------
签名:自己选的路,跪着也要走完;理想的实现,需要不懈奋斗!
-------------------------------------