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 }
浙公网安备 33010602011771号