openjudge 1792 迷宫 解析报告
2016-09-21 15:39
281 查看
关于一道大水题的解析报告。
1792:迷宫
总时间限制: 3000ms 内存限制: 65536kB
描述
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。
输入
第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。
输出
k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。
样例输入
2
3
.##
..#
#..
0 0 2 2
5
.....
###.#
..#..
###..
...#.
0 0 4 0
样例输出
YES
NO
看过这道题,脑子里应该突然就有想法。诶
这道题就是BFS嘛。广搜对于这种最短路径就是最好的方法。
更何况,这道题就是问你这个能不能走过,而不是问最短路径。所以就变的更简单了。
简单来说,就是套路。
队列,BFS,状态。
嗯就是这样。
hhh这道水题是我用vim第一次AC的题。
等用过Vim,就会突然觉得。这种不用鼠标的感觉,只依赖双手的打字速度的工具简直,就是完美。
嗯就是这样。
1792:迷宫
总时间限制: 3000ms 内存限制: 65536kB
描述
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。
输入
第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。
输出
k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。
样例输入
2
3
.##
..#
#..
0 0 2 2
5
.....
###.#
..#..
###..
...#.
0 0 4 0
样例输出
YES
NO
看过这道题,脑子里应该突然就有想法。诶
这道题就是BFS嘛。广搜对于这种最短路径就是最好的方法。
更何况,这道题就是问你这个能不能走过,而不是问最短路径。所以就变的更简单了。
简单来说,就是套路。
队列,BFS,状态。
嗯就是这样。
hhh这道水题是我用vim第一次AC的题。
等用过Vim,就会突然觉得。这种不用鼠标的感觉,只依赖双手的打字速度的工具简直,就是完美。
#include<cstdio> #include<string.h> using namespace std; char map_1[101][101]; int x1,y1,x2,y2; struct node { int x,y; }; int map_2[101][101]; int x_1[5]={0,1,-1,0,0}; int x_2[5]={0,0,0,1,-1}; node q[100001]; int heads,lose; void push(node a) { q[++lose]=a; return ; } int BFS() { node a; a.x=x1;a.y=y1; q[1]=a; while(heads<=lose)//队列里有没有东西。查看状态有没有全部枚举完 { node n; n=q[heads]; heads++; if(n.x==x2&&n.y==y2){//发现诶!可以! printf("YES\n"); return 0; } for(int i=1;i<=4;i++) { node n1; n1=n; if(!map_2[n1.x+x_1[i]][n1.y+x_2[i]]&&map_1[n1.x+x_1[i]][n1.y+x_2[i]]=='.')//判断继续能不能走 { n1.x+=x_1[i]; n1.y+=x_2[i]; push(n1); map_2[n1.x][n1.y]=1; } } } printf("NO\n"); return 0; } int main() { int n,m; scanf("%d",&n); while(n--) { memset(map_1,'#',sizeof(map_1)); memset(map_2,0,sizeof(map_2));//初始化。这个一定不要忘了。 heads=lose=1; scanf("%d\n",&m); for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { scanf("%c",&map_1[i][j]); } scanf("\n"); } scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1+=1;y1+=1;x2+=1;y2+=1;//这道题这个地方特别坑,认真读题 if(map_1[x1][y1]=='#'||map_1[x2][y2]=='#') { printf("NO\n"); continue; } BFS(); } return 0; }
嗯就是这样。
相关文章推荐
- openjudge 1805碎纸机 解析报告
- 【原创】【OpenJudge】 1792:迷宫
- 报告解析新时期云计算CIO角色转变
- Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
- hdu 4524 郑厂长系列故事——逃离迷宫 解题报告
- OpenJudge 2.5 7084:迷宫问题
- POJ 3984 迷宫问题 解决报告
- 13家中国域名商(国际域名)解析量报告(8月18日)
- HDU-1728 逃离迷宫 解题报告
- Oracle AWR报告指标全解析(二)
- Leetcode 91. Decode Ways 路线解析 解题报告
- XHProf报告字段含义的解析
- WR解析报告
- HDU 1728 解题报告 ---- 逃离迷宫
- HID报告描述符解析_笔记
- HDU-1728 逃离迷宫 解题报告(张浩盛伦)
- Oracle AWR报告指标全解析(三)
- BZOJ3732 解析报告//LCA,最小生成树
- JMeter学习-019-JMeter 监听器之【聚合报告】界面字段解析及计算方法概要说明
- 数据结构课程设计——迷宫问题课程设计报告