hud 1312 搜索
来源:互联网 发布:java 文本按行读取 编辑:程序博客网 时间:2024/06/06 15:46
http://acm.hdu.edu.cn/showproblem.php?pid=1312
方法一:广度优先搜索。
利用队列“先进先出 FIFO”的特点(本例用数组queue和标记L等效一个队列),距离起点越近越先被搜索,适合计算消费与距离成比例的问题。
#include<stdio.h>#define N 22int flag[N][N],W,H,count,L,i,j;int dir[4][2]={0,1,1,0,0,-1,-1,0};struct node{ int x,y;}next,queue[N*N];void BFS(int x,int y){ queue[0].x=x; queue[0].y=y; count++;L++; for(i=0;i<L;i++) { for(j=0;j<4;j++) { next.x=queue[i].x+dir[j][0]; next.y=queue[i].y+dir[j][1]; if(flag[next.x][next.y]==0&&next.x>=0&&next.x<W&&next.y>=0&&next.y<H) { count++; flag[next.x][next.y]=1; queue[L].x=next.x; queue[L++].y=next.y; } } }}int main(){ int x,y; char t; while(scanf("%d%d",&W,&H),W||H) { count=0;L=0; for(i=0;i<H;i++) { getchar(); for(j=0;j<W;j++) { scanf("%c",&t); if(t=='.') flag[j][i]=0; if(t=='#') flag[j][i]=1; if(t=='@) { x=j; y=i; flag[j][i]=1; } } } BFS(x,y); printf("%d\n",count); } return 0;}
方法二:深度优先搜索。
通过递归调用系统栈,利用栈“先进后出 FILO”的特点,对一个方向搜索到底后逐步向上回溯。
#include<stdio.h>#define N 25int flag[N][N],count,W,H;int dir[4][2]={1,0, 0,1, -1,0, 0,-1};void DFS(int x,int y){ int next_x,next_y,i; for(i=0;i<4;i++) { next_x=x+dir[i][0]; next_y=y+dir[i][1]; flag[y][x]=1; if(flag[next_y][next_x]==0&&next_x>=0&&next_x<W&&next_y>=0&&next_y<H) { count++; DFS(next_x,next_y); } }}int main(){ int i,j,x,y; char t; while(scanf("%d%d",&W,&H),W||H) { for(i=0;i<H;i++) { getchar(); for(j=0;j<W;j++) { scanf("%c",&t); if(t=='.') flag[i][j]=0; if(t=='#') flag[i][j]=1; if(t=='@) { x=j; y=i; count=1; //注意count初始化一定不要放在dfs函数中,否则递归调用时会不停初始化 } } } DFS(x,y); printf("%d\n",count); } return 0;}
- hud 1312 搜索
- HUD 1175 bfs广度搜索
- HUD 1241 搜索 三维深搜
- hud 1010 走迷宫 搜索—bfs
- 二叉搜索树学习(hud 3791)
- hud 5012 Dice(隐式图的搜索 )
- HUD
- hud 1312 Red and Black
- hud 2199 Can you solve this equation?(二分搜索)
- 欧拉回路 HUD 1878 深度优先搜索
- hud 1428 漫步校园 优先队列+记忆化搜索
- hud 1010 (Tempter of the Bone)——dfs(深度优先搜索算法)
- HUD 5323 Solve this interesting problem dfs剪枝搜索,重构线段树
- HUD 1000
- HUD 1033
- HUD 4038
- HUD P1561
- HUD 4473
- 杭电ACM1108求最小公倍数
- 2013年2月26日csdn java生涯第一天
- ACM之计算时间
- windos下no module named setuptools解决方案
- Cocos2dx------touch事件
- hud 1312 搜索
- unity3d,卸载,清除原先的licence
- Android Library 工程实现模块复用 (代码及资源文件)
- ACM之Fibonacci数列
- Ubuntu12.04利用CMake-2.8.10.4编译OpenCV-2.4.4
- 如何把笔记本摇身变成路由器
- ACM之打印方正
- 异或双向链表
- eclipse插件findbugs的检查规则的导入和导出