当前位置: 首页 > 编程日记 > 正文

C++回溯法走迷宫

  1 #include <iostream>  
  2 #include <iomanip>  
  3 #include <cstdlib>  
  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 << "没有可走路径!"<<endl;
117 }

作者:耑新新,发布于  博客园

转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com

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

相关文章:

js放大镜特效

原理分析&#xff1a;当鼠标在小图片上移动时&#xff0c;通过捕捉鼠标在小图片上的位置&#xff0c;定位大图片的相应位置。&#xff08;同时&#xff0c;当鼠标在小图片上移动时&#xff0c;右侧大图片往相反的方向移动。&#xff09; 放大镜特效设计&#xff1a; ①页面元素…

5页面返回上个页面定位_5个步骤,画好页面流程图

对于任何产品设计来说&#xff0c;构建流程都是一个绕不开的环节。其奠定了后续的产品框架&#xff0c;是用户体验的基石。本文将从定义和方法出发&#xff0c;结合实际案例&#xff0c;深入浅出地阐述流程图的作用以及画法。最近在做一个关于阅读笔记的原型&#xff0c;业务流…

EOS智能合约:system系统合约源码分析

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 eosio.system 概览 笔者使用的IDE是VScode&#xff0c;首先来看eosio.system的源码结构。如下图所示。 本文分析的源码来自于eosio.contracts。 …

文字超过省略_从楚篆到楚玺的文字结构

从古文字研究的角度来说&#xff0c;楚玺文字也是楚文字系统中重要的组成部分。古文字发展演变的一般规律&#xff0c;如简化、繁化、异化、分化、类化等在印章上也有反映。在楚系简帛书没有大量出土发现和研究出版前&#xff0c;楚玺研究的文字参照物不多&#xff0c;主要是依…

caffe prototxt分析

测试用prototxt name: "CIFAR10_quick"layer {name: "data" type: "MemoryData" top: "data" top: "label" memory_data_param {batch_size: 1 #样本个数 channels: 3 height: 32 width: 32 }}layer {name: "conv1…

Mysql与Oracle区别

Mysql与Oracle区别 文章分类:数据库 周五去一家公司去面试&#xff0c;那公司经理问了关于Mysql与Oracle的区别问题&#xff0c;以前没有总结&#xff0c;回答也不是很好&#xff0c;只是凭感觉&#xff0c;先总结如下&#xff1a; 1. Oracle是大型数据库而Mysql是中小型数据库…

区块链 + 大数据:EOS存储

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 谈到区块链的存储&#xff0c;我们很容易联想到它的链式存储结构&#xff0c;然而区块链从比特币发展到今日当红的EOS&#xff0c;技术形态已经演化…

全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...

不多说&#xff0c;直接上干货&#xff01; 缘由&#xff1a; &#xff08;1&#xff09;最近看到情侣零点送祝福&#xff0c;感觉还是很浪漫的事情&#xff0c;相信有很多人熬夜为了给爱的人送上零点祝福&#xff0c;但是有时等着等着就睡着了或者时间并不是卡的那么准就有点强…

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo

更新了xcode后使用goland运行项目时提示 Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo 更具提示打开xcode 点击agree安装即可&#xff01; 转载于:https://www.cnblogs.com/mafeng/p/6196494.html

arc diff 指定版本号_Phabricator客户端安装

前提需要配置好服务器端客户端安装mac环境下&#xff0c;指定一个目录$ mkdir somewhere/$ cd somewhere/somewhere/ $ git clone https://github.com/phacility/libphutil.gitsomewhere/ $ git clone https://github.com/phacility/arcanist.git配置环境变量&#xff0c;在.ba…

EOSIO 转帐详解

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 EOS和EOS的不同之处 在EOS网络中存在两种货币&#xff0c;一种是EOS&#xff0c;还有一种是EOS网络中的代币。说到这里大家似乎有点疑惑&#xff0…

各种函数调用约定及浮点数传参

32位下_stdcall, _fastcall, _cdecl #include <windows.h>int _stdcall Func1(int a, int b, int c, int d) {return abcd; } int _fastcall Func2(int a, int b, int c, int d) {return abcd; } int _cdecl Func3(int a, int b, int c, int d) {return a b c d; }…

cookie、session总结

前几天在调试第三方支付接口时碰到一个session失效问题&#xff0c;用了几天时间才搞明白&#xff0c;现在回想一下&#xff0c;主要还是由于cookie和session这一块的一些基本概念没有搞清楚&#xff0c;现总结一下。 浏览器使用HTTP协议作为应用层协议&#xff0c;而HTTP协议是…

glibc降级后怎么恢复 linux_Linux(CentOS)GLIBC出错补救方式

出于各种原因&#xff0c;我玩坏了我的系统.........主要出错原因是更改 /usr/lib64 下的 libc.so.6 等文件引起&#xff0c;具体错误及补救方式附上&#xff0c;希望可以帮到心里失火后来人&#xff1a;首先&#xff0c;不要随便重新启动&#xff01;&#xff01;&#xff01;…

将Eclipse代码导入到AndroidStudio的两种方式

实现步骤 1. 从Eclipse中导出Gradle build files 在Eclipse菜单中 File --> Export-->Generate Gradle build files接下来会到达警告界面&#xff0c;这里会提示AndroidStudio可以直接导入ADT的工程&#xff0c;先过&#xff0c;后面有直接导入的讲解。选中你的项目工程&…

微软浏览器适配问题前端_「图」微软新贡献:修复Chromium浏览器的奇怪触控板手势问题...

去年微软宣布计划成为Chromium项目的重要贡献者之一&#xff0c;希望为包括Edge和Chrome在内所有基于Chromium的浏览器带来更多改进和功能。在增强鼠标滚动和搜索功能之外&#xff0c;微软现在将部分精力放在部分Windows 10设备(例如Surface Pro系列和Surface Book系列)上奇怪的…

ruby gems列表

1 https://github.com/shageman/cobradeps 转载于:https://www.cnblogs.com/or2-/p/9268352.html

简明区块链原理

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “区块链”应有特质&#xff1a; 使用了具有 “哈希链” (下文有解释) 形式的数据结构保存基础数据 有多个结点参与系统运行&#xff08;分布式…

Bash shell

一、认识bash shell 1、登录取得的shell就记录在/etc/passwd这个文件内 可以使用cat /etc/passwd查看 2、bash shell 功能 a. 命令记忆能力&#xff08;history&#xff09;&#xff0c;默认1000个&#xff0c;存在~/.bash_history文件 b. 命令与文件补全功能&#xff08;Tab键…

快过高铁!构建云分布式应用还能这样操作?!

先跟跟大家说一个中国历史上杰出的军事家、政治家&#xff0c;长长的胡子&#xff0c;红的发黑的脸&#xff0c;骑着一匹红色的马。没错&#xff01;他就是三国跑的最快的男人——曹操&#xff08;说曹操曹操到&#xff09;&#xff01; 不说笑了。 关羽&#xff0c;字云长&…

基于安卓的考试系统_基于安卓11定制!华为最新手机系统曝光:体验堪比苹果iOS!...

在最近的一场发布会上&#xff0c;华为正式宣布了自家的HMS和AppGallery服务&#xff0c;对标安卓Play商店和苹果Appstore商店&#xff0c;这一举措让华为再度登上风口浪尖。这种做法在业界人士眼里的目的只有一个&#xff0c;华为要脱离安卓系统自立门户&#xff0c;从建立第三…

区块链前世今生

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 比特币的起源 2008年&#xff0c;一位化名为中本聪的人&#xff0c;在一篇为《比特币&#xff1a;一个点对点的电子现金系统》的论文中首先提出了比…

前端知识之HTML内容

参考:http://www.cnblogs.com/liwenzhou/p/7988087.html HTML介绍 Web服务本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n&qu…

征途linux mysql_MySql征途之mysql常用命令

mysql征程之mysql常用命令一、连接MySql语法&#xff1a; mysql -h 主机地址 -u 用户名 &#xff0d;p 用户密码例1&#xff1a;连接到本机上的MYSQL。键入命令mysql -u root -p(本地连接 主机地址可以不写)&#xff0c;回车后提示你输入密码&#xff0c;输入正确之后&#xff…

区块链+物联网=?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链与物联网(IoT)的交叉应用已成为最有前途的区块链用例之一。在过去的几个月里&#xff0c;IoTeX一直与我们的战略合作伙伴合作&#xff0c;并…

mysql 中文截取_mysql 截取中文字符

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

2016年度工作总结

一想起来今天全办公室人都在写年终总结的场景&#xff0c;不由自主的笑开了颜&#xff0c;因为我把一名程序媛的年终总结硬生生的写成了一篇“散文”&#xff0c;而且还是很“冒牌”的总结&#xff0c;以下就是“散文版”的总结。 在紧锣密鼓的业务GO推广上线期间&#xff0c;x…

django-后台sms管理系统的css框架

django-后台sms管理系统的css框架 地址&#xff1a;https://adminlte.io/ 下载代码。使用index.html的页面及相关文件 通过下在线检查adminlte.io的后台的各种模块元素&#xff0c;仿写。posted on 2018-07-06 11:41 .Tang 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.c…

go语言学习-iota

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Go没有枚举类型,可以用常量模拟可以用iota生成从0 开始的自动增长的枚举值。按行递增,可以省略后续行的 iota 关键字. iota 在一个const()中每次累…

mysql中查询表格属性

&#xff08;1&#xff09;获取数据库表格列设置的长度&#xff0c;SQL SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_NAME表名 AND TABLE_SCHEMA数据库名 AND COLUMN_NAME字段名 &#xff08;1&#xff09;查出数据库表格所有的属性 SELECT …