博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫全解
阅读量:4553 次
发布时间:2019-06-08

本文共 2284 字,大约阅读时间需要 7 分钟。

相关题连接:

一本通:

小白菜OJ:

 

 

一、DFS写法:

问题一:迷宫是否能走通?()

 

1 #include
2 #include
3 using namespace std; 4 int n; 5 char a[200][200]={
0};//用于存放迷宫数据,.为可走,#为不可走 6 int book[200][200];//用于标记该点是否被访问,0为未被访问,1为已经访问 7 int next[4][2]={
{
0,-1},{-1,0},{
0,1},{
1,0}};//存储下一步坐标累加数 8 int stx, sty, edx, edy;//分别代表迷宫初始位置、目标位置坐标 9 bool f;//标记迷宫是否能走通 10 void dfs(int x, int y)11 {12 //如果到达目标坐标,则打印输出,递归出口 13 if(x==edx&&y==edy) {14 f=true;15 }16 //尝试四方向的邻居坐标 17 for(int i=0; i<4; i++)18 {19 //计算下一个点的坐标 20 int nx=x+next[i][0];21 int ny=y+next[i][1];22 23 if(nx<0 || nx>n-1 || ny<0 || ny>n-1) continue;//判断是否越界24 if(book[nx][ny]==0 && a[nx][ny]=='.')25 {26 book[nx][ny]=1;//试探 27 dfs(nx, ny);28 //book[nx][ny]=0;//回溯 注意此处不需要回溯,否则就会超时29 } 30 } 31 }32 int main()33 {34 int k;35 scanf("%d",&k);36 while(k--)37 {38 f=false;//刚开始假定迷宫走不通39 memset(book,0,sizeof(book)); //book初始化为0 40 scanf("%d",&n);41 for(int i=0; i

 

 

 

问题二:有多少种走法?

 

问题三:输出每条走法?

 

问题四:输出最短路径数?()

 

1 #include 
2 int a[51][51],book[51][51]; 3 int next[4][2]= {
{
0,-1},{-1,0},{
0,1},{
1,0}};//这里一定要和数学上的坐标进行区分,x,y分别代表行和列 4 int n, m;//n行m列迷宫 5 int min=999999999;//用于存放最短步数,并设定min初始值为一个较大值 6 int stx,sty,edx,edy;//分别代表迷宫初始位置、目标位置坐标 7 bool f=false;//刚开始假定迷宫走不通 8 void dfs(int x,int y,int step) { 9 int nx,ny;//---->>>>注意这一行一定只能写在dfs内<<<<<----- 10 if(x==edx&&y==edy) {11 f=true;12 if(step
n||ny<1||ny>m) {
//判断是否越界21 continue;22 }23 if(book[nx][ny]==0&&a[nx][ny]==0) {24 book[nx][ny]=1;25 dfs(nx,ny,step+1);26 book[nx][ny]=0;//收回不能丢27 }28 }29 }30 int main() {31 scanf("%d%d",&n,&m);32 for(int i=1; i<=n; i++) {33 for(int j=1; j<=m; j++) {34 scanf("%d",&a[i][j]);35 }36 }37 scanf("%d%d%d%d",&stx,&sty,&edx,&edy);38 book[stx][sty]=1;//这里就和全排列有点不一样,因为这里进去之后就要发生改变,而全排列进去之后不改变39 dfs(sty,sty,0);40 if(!f)printf("No Way!");41 else printf("%d\n",min);42 return 0;43 }

 

二、BFS写法:

 

转载于:https://www.cnblogs.com/tflsnoi/p/9739612.html

你可能感兴趣的文章
网络体系结构
查看>>
练习4.13、4.14、4.15、4.16
查看>>
SAP库龄表
查看>>
PhantomJS 基础及示例 (转)
查看>>
20175316盛茂淞 2018-2019-2 《Java程序设计》第3周学习总结
查看>>
zookeeper安装
查看>>
js清空页面控件值
查看>>
Appium使用Python运行appium测试的实例
查看>>
django request bug
查看>>
二叉树_非递归先中后序_递归非递归求深度
查看>>
20181227 新的目标
查看>>
HDFS写流程
查看>>
生产环境服务器环境搭建+ 项目发布
查看>>
js按条件分类json数组,并合计同组数据(一维转换为二维)
查看>>
Exp6 信息搜集与漏洞扫描
查看>>
redis4安装
查看>>
使用命令wsimport构建WebService客户端[转]
查看>>
第八遍:链接详解
查看>>
Qt5.5 使用smtp发邮件的各种坑
查看>>
js奇葩错误 字符串传递问题
查看>>