杭电 HOJ 1548 A strange lift 解题报告
搜索,广度优先。
之前使用的遍历超时了,没办法,学习了队列的写法。以下代码源自网上,改了一点,AC
#include<iostream> #include<deque> using namespace std; int main() { int i,a,b,n,x,y,s[201],t[201]; deque<int> q; while(cin>>n && n) { q.clear(); memset(t,0,sizeof(t)); cin>>a>>b; for(i=1;i<=n;i++) cin>>s[i]; q.push_back(a); x=q.front(); t[x]=1; while(x!=b) { y=s[x]; if(x+y<=n&&!t[x+y]) { q.push_back(x+y); t[x+y]=t[x]+1; } if(x-y>=1&&!t[x-y]) { q.push_back(x-y); t[x-y]=t[x]+1; } q.pop_front(); if(q.empty()) break; x=q.front(); } cout<<(x==b?t[x]-1:-1)<<endl; } }