博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++回溯法走迷宫
阅读量:4631 次
发布时间:2019-06-09

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

 

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 #define MaxSize 100 7 int maze[10][10] = //定义一个迷宫,0表示通道,1表示墙 8 { 9 { 1,1,1,1,1,1,1,1,1,1 }, 10 { 1,0,0,1,1,0,0,1,0,1 }, 11 { 1,0,0,1,0,0,0,1,0,1 }, 12 { 1,0,0,0,0,1,1,0,0,1 }, 13 { 1,0,1,1,1,0,0,0,0,1 }, 14 { 1,0,0,0,1,0,0,0,0,1 }, 15 { 1,0,1,0,0,0,1,0,0,1 }, 16 { 1,0,1,1,1,0,1,1,0,1 }, 17 { 1,1,0,0,0,0,0,0,0,1 }, 18 { 1,1,1,1,1,1,1,1,1,1 } 19 }; 20 21 struct Try //定义一个栈,保存路径 22 { 23 int i; //当前方块的行号 24 int j; //当前广场的列号 25 int d; //di是下一可走方位的方位号 26 } path[MaxSize]; //定义栈 27 28 int top = -1; //初始化栈指针 29 30 void findPath(int xb, int yb, int xe, int ye); 31 32 int main() 33 { 34 int x1, x2, y1, y2; 35 cout << "请设定起点(x1,y1):" << endl; 36 cout << "x1:"; 37 cin >> x1; 38 cout << "y1:"; 39 cin >> y1; 40 cout << "请设定终点(x2,y2):" << endl; 41 cout << "x2:"; 42 cin >> x2; 43 cout << "y2:"; 44 cin >> y2; 45 findPath(x1, y1, x2, y2); //从(x1,y1)进入,从(x2,y2)出 46 system("pause"); 47 return 0; 48 } 49 50 void findPath(int xb, int yb, int xe, int ye) //路径为从(xb,yb)到(xe,ye) 51 { 52 int i, j, d, find, k; 53 top++; //初始方块进栈 54 path[top].i = xb; 55 path[top].j = yb; 56 path[top].d = -1; 57 maze[xb][yb] = -1; 58 while (top>-1) //栈不为空时循环 59 { 60 i = path[top].i; 61 j = path[top].j; 62 d = path[top].d; 63 if (i == xe && j == ye) //找到了出口,输出路径 64 { 65 cout << "迷宫路径如下:\n"; 66 for (k = 0; k <= top; k++) 67 { 68 cout << "\t(" << path[k].i << "," << path[k].j << ")"; 69 if ((k + 1) % 5 == 0) 70 cout << endl; //每输出五个方块后换一行 71 } 72 cout << endl; 73 return; 74 } 75 find = 0; 76 while (d<4 && find == 0) //找下一个可走的点 77 { 78 d++; 79 switch (d) 80 { 81 case 0: //向上 82 i = path[top].i - 1; 83 j = path[top].j; 84 break; 85 case 1: //向右 86 i = path[top].i; 87 j = path[top].j + 1; 88 break; 89 case 2: //向下 90 i = path[top].i + 1; 91 j = path[top].j; 92 break; 93 case 3: //向左 94 i = path[top].i; 95 j = path[top].j - 1; 96 break; 97 } 98 if (maze[i][j] == 0) find = 1; //找到通路 99 }100 if (find == 1) //找到了下一个可走方块 101 {102 path[top].d = d; //修改原栈顶元素的d值 103 top++; //下一个可走方块进栈 104 path[top].i = i;105 path[top].j = j;106 path[top].d = -1;107 maze[i][j] = -1; //避免重复走到这个方块 108 //cout << "\t(" << path[top].i << "," << path[top].j << ")"; //显示经过的试探 109 }110 else //没有路可走,则退栈 111 {112 maze[path[top].i][path[top].j] = 0; //让该位置变成其它路径可走方块 113 top--;114 }115 }116 cout << "没有可走路径!"<

 

作者:耑新新,发布于  

转载请注明出处,欢迎邮件交流:

转载于:https://www.cnblogs.com/Amedeo/p/6171215.html

你可能感兴趣的文章
python3 面向对象(一)
查看>>
配件商城项目总结
查看>>
关于变量名前面加m的问题
查看>>
腾讯Bugly异常崩溃SDK接入
查看>>
安装centos后无法引导启动windows7的解决方法
查看>>
AutoMapper用法
查看>>
Java 学习笔记(4)——java 常见类
查看>>
IOS开源项目汇总
查看>>
用herl工具解决微信内链接或二维码可直接用外部浏览器打开
查看>>
GITHup的使用
查看>>
void main()是错的!
查看>>
Atitit. Attilax企业框架 AEF的发展里程总结
查看>>
亚麻 面经_ml
查看>>
豆瓣api
查看>>
SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复
查看>>
Entity Framework的启动速度优化
查看>>
Hadoop2.6.0伪分布环境搭建
查看>>
贴现因子
查看>>
2019-03-20 Python爬取需要登录的有验证码的网站
查看>>
docker(4)docker的网络,自定义网桥
查看>>