HDU1548 A strange lift

题目:HDU1548

 

题解:

  本来是一道挺简单的BFS题,结果我又写了好久...感觉自己是条咸鱼

  因为我之前几乎都在用别人写好的模板,所以对BFS的理解不深刻。这次尝试自己亲手撸代码之后也发现了许多问题。

  queue的定义应该放在bfs函数里面,我上来就给定义成了全局变量,我还很好奇这一组数据的queue不清空怎么去测试下一组数据...

  

代码:

  

 1 #include<cstdio>
 2 #include<queue>
 3 #include<cstring>
 4 #define maxn 205
 5 using namespace std;
 6 
 7 int n,s,v;
 8 int flo[maxn],des[maxn];
 9 bool f[maxn],jud;
10 
11 
12 void bfs(int u,int l)
13 {
14     queue<int> q;
15     int now,mid;
16     f[u]=false;
17     q.push(u);
18     des[u]=0;
19     while(!q.empty()){
20         now=q.front();
21         q.pop();
22         if(now==l){
23             jud=true;//表示能到达这个楼层
24              break;
25         }
26         for(int i=1;i==1||i==-1;i=i-2){//上下楼用for循环来处理
27             mid=now+i*flo[now];
28             if(mid>0&&mid<=n&&f[mid]){
29                 des[mid]=des[now]+1;
30                 q.push(mid);
31                 f[mid]=false;
32             }
33         }
34     }
35 }
36 
37 
38 int main()
39 {
40     while(scanf("%d",&n)&&n){
41         scanf("%d%d",&s,&v);
42         for(int i=1;i<=n;i++)
43             scanf("%d",&flo[i]);
44 
45         memset(f,true,sizeof(f));
46         jud=false;
47         
48         bfs(s,v);
49 
50         if(jud) printf("%d\n",des[v]);
51         else printf("-1\n");
52     }
53     return 0;
54 }

 

posted on 2017-02-24 13:01  RocSAMA  阅读(91)  评论(0)    收藏  举报