杭电1010-搜索&&迷宫问题
来源:互联网 发布:c语言入门教程pdf 编辑:程序博客网 时间:2024/06/05 12:49
迷宫问题,注意剪枝!!!
AC代码:
#include<stdio.h>#include<math.h>int n,m,t,flag;int startx,starty,endx,endy,starttime,wallnum;int movex[]={0,-1,0,1},movey[]={-1,0,1,0};//char maze[10][10];int abs(int a,int b){int c;c=a-b;if(c>0) return c;else return b-a;}int dfs(int sx,int sy,int st){int i,time;if(sx==endx&&sy==endy&&st==t){//到达终点 flag=1;return 1;}time=t-st-abs(sx,endx)-abs(sy,endy);if(time<0||time%2!=0)//剪枝 return 0;for(i=0;i<4;i++){if(sx+movex[i]<0||sx+movex[i]>m-1||sy+movey[i]<0||sy+movey[i]>n-1) continue; if(maze[sx+movex[i]][sy+movey[i]]!='X') { maze[sx+movex[i]][sy+movey[i]]='X'; dfs(sx+movex[i],sy+movey[i],st+1); maze[sx+movex[i]][sy+movey[i]]='.'; } if(flag) break;} }int main(){while(scanf("%d%d%d",&m,&n,&t)!=EOF&&!(m==0&&n==0&&t==0)){int i,j;getchar();//flag=0;//标志量 ,为1时说明找到出口 wallnum=0;//墙的数量起始为0 for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%c",&maze[i][j]); if(maze[i][j]=='S') { startx=i; starty=j; maze[startx][starty]='X';//标记起始位置,走过的不能再走了 } else if(maze[i][j]=='D') { endx=i;endy=j; } else if(maze[i][j]=='X') wallnum++; } getchar();//接受换行符 } if(n*m-wallnum>=t){dfs(startx,starty,0);} if(flag) printf("YES\n");else printf("NO\n");}return 0;}
- 杭电1010-搜索&&迷宫问题
- 杭电1241-搜索专题&&迷宫问题
- 杭电1242-搜索专题&&迷宫问题
- 杭电1728逃离迷宫 BFS 搜索
- 杭电1728逃离迷宫解法二 BFS 搜索
- 搜索之迷宫问题
- 杭电1016深度搜索问题
- poj_3984_迷宫问题(搜索)
- 迷宫问题-广度优先搜索
- [搜索] POJ 3984 迷宫问题
- 迷宫问题-广度优先搜索
- 广度优先搜索:迷宫问题
- 堆栈解决迷宫搜索问题
- POJ3984迷宫问题(搜索)
- 搜索算法之迷宫问题
- BFS广度搜索(迷宫问题)
- 杭电hdu 逃离迷宫
- 杭电oj1269 迷宫城堡
- android Bitmap与string互转
- hdu 1878 欧拉回路
- 安卓模拟器上安装apk
- coreData 模糊查询过滤
- c++判断文件是否存在
- 杭电1010-搜索&&迷宫问题
- Jquery 实现Radion的变色功能
- XPCollection and Collection
- Cannot modify header information - headers already sent by (output started at D:\softwares\wamp\wamp
- Android中Styles、Themes、attrs介绍
- Filter and Dispatcher
- 开发版比企业版有什么限制?
- eclipse中出现type int32_t could not be resolved
- Jquery 实现全选反选功能