uva 784 Maze Exploration(迷宫探索) —— DFS
来源:互联网 发布:旅游景点数据库 编辑:程序博客网 时间:2024/05/14 04:47
/**序号:num_4作者:MrZhang日期:2016-5-21题目名称: Maze Exploration(迷宫探索)题目来源:uva —— 784 —— Maze Exploration网址:英文题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18558中文翻译:(中文为笔者自己个人翻译,几乎一致。但还是强烈建议您亲自阅读英文版题目)--------------------------------------如图1a,用二维表格描述了一个迷宫,这个迷宫有多个矩形房间。这个网格的每个点有一个符号表示。房间的墙壁使用相同的符号表示的,这些符号是除了'*'、'_'、空格之外的任何可打印的符号。例如,在图1中这些符号就是'X'。网格的其他部分用空格表示。如图2,所有的房间大小相同,都有3个单位长,1个单位厚的墙围成。另外,一堵墙由其分隔开的房间共享。房间之间有门连通,这些门都在墙壁的中间。这里没有室外的门。给你一个用'*'(这个'*'在该房间的中间)标记的房间作为开始房间,你的任务是从该房间出发涂刷该迷宫中所有能访问到的房间。如果在两个房间之间的墙上有一扇门,那么就能从一间房间进入另一间房间。如图1b,如果一个房间的的所有空间包括门都被符号'#'标记了,就说这间房间被涂刷了。输入:程序输入如下:1.第一行包含一个正数,表示需要涂刷的迷宫数量。2.剩下的部分就是这个迷宫。 输入的每一行长度可能不同。输入一个迷宫后需要再输入一行'_'作为分割线。每个迷宫最多有30行,每行最多有80个字符。程序从标准输入读取数据。输出:输出的迷宫与输入时的迷宫格式相同,包括分割线。程序往标准输出上输出。--------------------------------------数据样例:2XXXXXXXXXX X XX * XX X XXXXXXXXXXX XX XX XXXXXX_____XXXXXX XX * XX XXXXXX_____输出:XXXXXXXXXX###X###XX#######XX###X###XXXXXXXXXXX XX XX XXXXXX_____XXXXXX###XX###XX###XXXXXX_____*/#include<iostream>#include<cstring>#include<cstdio>#define maxn 90using namespace std;char G[maxn][maxn];bool check(int x,int y){ char wall = G[0][0]; if(G[x][y] != wall && G[x][y] != '#') { return true; } return false;}int dx[6] = {-1,1, 0,0};int dy[6] = { 0,0,-1,1};void DFS(int x,int y){ for(int i=0;i<4;i++){ int u = x + dx[i] , v = y + dy[i]; if(check(u,v)){ G[u][v] = '#'; DFS(u,v); } }}void printG(){ for(int i=0;i<maxn;i++){ if(G[i][0] == '_') break; for(int j=0;j<maxn;j++){ if(G[i][j] == '_') break; cout<<G[i][j]; } cout<<endl; }}int main(){ int counts; cin>>counts; getchar(); while(counts --){ /**初始化迷宫*/ memset(G,'_',sizeof(G)); /**输入迷宫及下划线*/ int start_i,start_j; //!保存 开始点的坐标 int row = 0;//!将str依次保存到迷宫的第row行 char str[maxn];//!依次存储迷宫的每一行,最后将保存分割线 //!gets()在向str中写入数据之前,会先将其内容清空 while(1){ gets(str); if(str[0] == '_') break; //!说明一个迷宫输入完成 //!如果迷宫还未输入完成,就将刚刚输入的这一行存储到图G中 int length_str = strlen(str); for(int j=0;j<length_str;j++) { G[row][j] = str[j]; //!将新输入的这一行保存到迷宫的第row行 if(str[j] == '*'){ start_i = row; start_j = j; } } row ++;//!为下一次保存做准备 } /***/ DFS(start_i,start_j); /**输出迷宫*/ printG(); /**输出分隔符*/ for(int i=0;i<strlen(str);i++) cout<<str[i]; cout<<endl; } return 0;}/**总结:题型:大标题:图的遍历小标题:visited[]用指定字符表示。(此处为'#')原理:深度优先搜索(DFS)注意:1.gets(str)的使用:str最好用char数组。gets()在向字符数组中输入数据时会先将数组清空。2.本题在测试时,小编从上述英文网址中复制输入数据,出错,自己输入则对,原因不明,望读者多加注意,若知晓原因,希望留言分享。建议读者从本文复制数据测试。*/
0 0
- uva 784 Maze Exploration(迷宫探索) —— DFS
- UVa 784 - Maze Exploration//DFS
- UVA 784-Maze Exploration(dfs)
- DFS——Maze Exploration
- UVa 784 Maze Exploration(DFS)
- UVA - 784 Maze Exploration (简单dfs)
- uva 784 Maze Exploration(简单dfs)
- UVa 784 Maze Exploration
- uva 784 - Maze Exploration
- uva 784 - Maze Exploration
- uva 784 - Maze Exploration
- UVa 784 - Maze Exploration
- UVA 784 - Maze Exploration
- UVa 784 - Maze Exploration
- uva 784 - Maze Exploration
- UVA 784 Maze Exploration
- uva 784 - Maze Exploration
- uva 784 - Maze Exploration
- 地铁译:Spark for python developers ---Spark的数据戏法
- js处理金额
- spring mvc controller间跳转 重定向 传参
- C++静态库基本编程
- 容器存放指针的技巧-自动管理内存
- uva 784 Maze Exploration(迷宫探索) —— DFS
- ERROR StatusLogger No log4j2 configuration file found.的解决方法
- 批量杀死进程
- C#网络程序设计1-4:多线程并发执行
- 使用eclipse搭建android开发环境
- 九度 OJ 1020:最小长方形
- Light oj 1414 - February 29【容斥原理】
- Firefox成为渗透测试工具的18个插件
- 趣味博客杂谈