杭电ACM1010(dfs+剪枝)
来源:互联网 发布:ps制作淘宝详情页 编辑:程序博客网 时间:2024/05/06 17:32
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010
题目大意:一只小狗被困在了一座迷宫中,迷宫有一个起点和一个终点,“X”代表墙,不能通行,“.”代表通路,迷宫终点的门只在特定时间开启一瞬间,因此小狗必须在这个时刻到达终点才能逃生。给出迷宫的地图和门开启的时间k,要求计算小狗是否能逃生,若能输出YES,不能输出NO。
解题思路:搜索,dfs+剪枝。
AC代码:
#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;char graph[10][10];int sx,sy,dx,dy,n,m,k;bool flag;bool visit[10][10];int turn[4][2] = {1,0,-1,0,0,1,0,-1};void dfs(int x,int y,int count){int mx,my;if(x==dx&&y==dy&&count==k){flag=1;return ;}if(count>=k)return ;if(graph[x][y]!='X'){for(int i=0;i<4;i++){mx = x+turn[i][0];my = y+turn[i][1];if(graph[mx][my]!='X'&&mx>=1&&mx<=n&&my>=1&&my<=m&&!visit[mx][my]){visit[mx][my] = 1;dfs(mx,my,count+1);visit[mx][my] = 0;if(flag)return ;}}}}int main(){int count;while(cin>>n>>m>>k){if(n==0&&m==0&&k==0)break;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>graph[i][j];if(graph[i][j]=='S'){sx = i;sy = j;}if(graph[i][j]=='D'){dx = i;dy = j;}}}if(abs(sx-dx)+abs(sy-dy)>k||(sx+sy+dx+dy+k)%2==1){cout<<"NO"<<endl;continue;}memset(visit,0,sizeof(visit));count=0;flag=0;visit[sx][sy] = 1;dfs(sx,sy,count);if(flag)cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;}
0 0
- 杭电ACM1010(dfs+剪枝)
- 杭电ACM1010——深度优先搜索+奇偶剪枝
- 杭电ACM1010
- 杭电1518 Square(DFS+剪枝)
- 杭电ACM1010(搜索题)
- 杭电ACM1010解题报告(编程语言Java)
- 杭电acm1010 Tempter of the Bone
- 北大ACM1010-深度优先搜索(DFS)初探
- Tempter of the Bone(杭电1010)(DFS+奇偶剪枝)
- 杭电1010——Tempter of the Bone(DFS、剪枝)
- 【杭电oj】1010 - Tempter of the Bone(dfs,奇偶剪枝,好题)
- 杭电1010Tempter of the Bone(dfs 奇偶剪枝)
- 【杭电oj1010 】- Tempter of the Bone(dfs,奇偶剪枝)
- DFS(剪枝)_hdu_1010
- Friends(DFS+剪枝)
- hdu5113(dfs+剪枝)
- hdu1010(dfs+剪枝)
- dfs+剪枝(hdu1010)
- 由于有中文命名的文件导致无法生成差分包
- 字母图形
- Android中线程间的通信
- Nginx日志文件配置与切割
- RS232/RS485
- 杭电ACM1010(dfs+剪枝)
- android开发者的42个必读网站
- sql的for xml path 和 stuff 结合使用
- 时间间隔方法参考
- OpenGL ES纹理贴图
- js 强制类型转换
- ArcGIS教程:成本距离工具工作原理(一)
- [LeetCode249]Group Shifted Strings
- 安装sql2000时提示:“写时无法打开指定的文件。请确保该文件没有使用,然后重新启动安装程序”