迷宫 dfs
来源:互联网 发布:英文写作软件 知乎 编辑:程序博客网 时间:2024/05/21 22:41
1791: 算法3-3:迷宫
时间限制: 1 Sec 内存限制: 32 MB提交: 11 解决: 9
[提交][状态][讨论版]
题目描述
有一个 10 x 10 的迷宫,起点是‘S’,终点是‘E’,墙是‘#’,道路是空格。一个机器人从起点走到终点。当机器人走到一个通道块,前面已经没有路可走时,它会转向到当前面向的右手方向继续走。如果机器人能够过,则留下足迹‘*’,如果走不通,则留下标记‘!’。
下面给出书中的算法,请你模拟机器人的走法输出最终的状态。
图:迷宫算法
输入
一个 10 x 10 的二维字符数组。
输出
机器人走过的路径状态。
样例输入
###########S # # ## # # ## ## ## ### ## # ## # # ## ### ## ### E###########
样例输出
###########**#!!!# ## *#!!!# ##**!!## ##*### ##***# ## #***# ## ###*## ### ****###########
提示
这道题是数据结构课上的一道题,当时没做出来,感觉自己编写队列的太难了。虽然思路是一样的。
学弟学妹们大一下学期,很快就会接触到数据结构了,希望大家多多练练,不要觉得麻烦,我现在就是觉得当时练的少,没了书很多东西自己敲不出来
暑假训练,做了搜索的专题,所以现在拿出来再写一次,用的是DFS方法
#include <iostream>#include <cstdio>#include <cstring>using namespace std;char map[15][15];int visti[15][15];int flag=1;int dir[4][2]= {{0,1},{1,0},{0,-1},{-1,0}}; //每次碰到障碍只能向右,所以顺序不能乱;void dfs(int x,int y) { if(map[x][y]=='E') { //到达出口,则输出路径 map[x][y]='*'; for(int i=0; i<10; i++) { for(int j=0; j<10; j++) printf("%c",map[i][j]); printf("\n"); } flag=0; //标记符,如果找到出口,则结束DFS; } map[x][y]='*'; visti[x][y]=1; for(int i=0; i<4; i++) { int newx=x+dir[i][0]; int newy=y+dir[i][1]; if(newx<10 && newy>=0 && newy<10 && newy>=0 && flag) //不能超过边界 if(!visti[newx][newy] && (map[newx][newy]==' ' || map[newx][newy]=='E')) //空白的地方才能走,visti数组用来标记是否遍历过,剪枝叶 dfs(newx,newy); } map[x][y]='!';//不能走到,但是遍历过,所以有置为;}int main() { for(int i=0; i<10; i++) { for(int j=0; j<10; j++) scanf("%c",&map[i][j]); getchar(); //注意换行符要读掉 } memset(visti,0,sizeof(visti)); for(int i=0; i<10; i++) for(int j=0; j<10; j++) { if(map[i][j]=='S'){ //找到开始的位置 dfs(i,j); break; } }}
阅读全文
0 0
- 迷宫DFS
- 迷宫(dfs)
- 迷宫 dfs
- 迷宫 DFS 递归 解法
- 迷宫 DFS 递归 解法
- 求解迷宫(DFS)
- 经典迷宫问题DFS
- C 语言 DFS 迷宫
- DFS走迷宫
- nyoj499 + 迷宫 + dfs
- 迷宫问题 POJ dfs
- HDU1728 逃离迷宫 DFS
- 迷宫问题的DFS
- 迷宫问题DFS
- 走迷宫(Dfs)
- 搜索dfs迷宫通关
- 迷宫问题dfs
- 迷宫问题 DFS
- 有关jquery的一坨内容,!!!∑(゚Д゚ノ)ノ------you can code, just code
- E
- hadoop--combiner、partitioner学习
- Android Dagger2
- input向后台传递值中含有括号
- 迷宫 dfs
- 2 Traffic Server限速插件
- 二叉树的所有的遍历算法
- LeetCode
- 常见文件字节码格式
- Python安装cx_Oracle模块和suds.client模块调用webservice服务
- 努力:论文CCCV 2017录取通知
- 轮播 多条目加载
- [LeetCode]420. Strong Password Checker深入浅出算法讲解和代码示例