HDU 1548 BFS 基础题
来源:互联网 发布:nginx 配置 centos7.2 编辑:程序博客网 时间:2024/06/07 06:00
裸题
需注意:
一、需要注意开vis数组记录;
二、关于状态的数组开多大。估计最坏的情况,开的略微大一点就可以
三、Pop().用t=q.front(),然后pop(),会很方便
四、因为没有每次清空队列而WA好多次,解决办法,1、自己写队列;2、每次都新建一个队列,可以将队列传递。比如在while循环里建队列,然后可以传递队列,在参数列表里queue &s即可,重新建队列效率明显比自己写队列再删除或者一个一个pop效率高
五、Impossible的情况
1 数据不合理注意很可能题中没有限制这一条所以一定自己判断
2 q已经empty还没有解决问题
加一句判断if(q.empty())printf("Impossi\n");
#include<cstdio>#include<cstring>#include<queue>using namespace std;#define N 202typedef struct{ int v; int dis;}node;int main(){ int ki[N],n,a,b,i,m,k; node s[210],t; bool vis[210]; while(scanf("%d",&n)!=EOF&&n!=0) { scanf("%d%d",&a,&b); memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) scanf("%d",&ki[i]); queue<node>q; if(a>n||b>n||a<0||b<0){printf("-1\n");continue;} s[i=0].v=a; s[0].dis=0; q.push(s[0]); vis[a]=1; while(!q.empty()) { t=q.front(); if(q.front().v==b){printf("%d\n",q.front().dis);break;} m=q.front().v+ki[q.front().v]; k=q.front().v-ki[q.front().v]; q.pop(); if(m<=n&&!vis[m]) { i++; s[i].v=m; s[i].dis=t.dis+1; q.push(s[i]); vis[m]=1; } if(k>0&&!vis[k]) { i++; s[i].v=k; s[i].dis=t.dis+1; q.push(s[i]); vis[k]=1; } } if(q.empty())printf("-1\n"); } return 0;}
- HDU 1548 BFS 基础题
- HDU 1072 Nightmare 基础BFS
- hdu 1548 一维bfs大水题
- HDU-1548(BFS搜索)
- HDU 1548 BFS
- hdu 1548 BFS
- hdu 1548(bfs)
- hdu~1548(bfs)
- HDU 1548 BFS
- HDU-1548(BFS+剪枝)
- HDU 1548 BFS入门
- 图论 BFS HDU 1548
- hdu 1548 简单BFS
- HDU 1548 BFS
- hdu 1548 bfs
- L - Oil Deposits HDU 1241 基础BFS
- hdu Problem-1242 最基础的BFS
- hdu 1195 Open the Lock(基础bfs)
- Extjs4---Uncaught TypeError: Cannot call method 'hasOwnProperty' of undefined
- 二叉树
- 如何读取txt文件内容
- 【OpenGL游戏开发之一】MAC OS X And Win7 vs2010 搭建OpenGL
- Android NDK 提供的交叉工具链手动编译源码
- HDU 1548 BFS 基础题
- Six_Training
- 二值形态学操作、图像的边缘检测、图像编码
- UVa 457 Linear Cellular Automata (water ver.)
- HDU--3068 最长回文 HDU(146)
- malloc/free与new/delete的区别 [转]
- 多进程读写锁
- A870省电内核&超频内核编译及制作
- Windows下载Android源码