剧情接上篇博客

打完八皇后之后,我走着六亲不认的步子准备回去领技能点(不充钱有技能点你也是不会变强的),但在这时,我突然发现我迷路了。。。完了啊,没大佬和队友帮我我可咋出去啊,愁死我了,但幻想了一下我以后翻身当大佬的情形,我:不行,我要出去,我还没翻身呢,我还没装过X呢,不能凉在这个鬼地方!!
于是我就好好研究了一下走出迷宫的方法

迷宫问题描述:

定义一个二维数组:

int maze[5][5] = {

0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

输入

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

输出

左上角到右下角的最短路径,格式如样例所示。

样例输入

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

样例输出

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

第一次我尝试用bfs走出迷宫,但到后面就开始瞎跑了,最后还是解决不了这个问题

#include<bits/stdc++.h>
using namespace std;
struct fuck
{int x,y;int p,q;
}que[1000];
int a[100][100],book[100][100];
int main()
{int tx,ty;int next[4][2]={ {0,1},{1,0},   {0,-1}, {-1,0} };int head=1,tail=1;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)scanf("%d",&a[i][j]);que[tail].x=1;que[tail].y=1;que[tail].p=1;que[tail].q=1;tail++;book[1][1]=1;int flag=0;while(head<tail){for(int k=0;k<=3;k++){tx=que[head].x+next[k][0];ty=que[head].y+next[k][1];if(tx<1||tx>5||ty<1||ty>5)continue;if(a[tx][ty]==0&&book[tx][ty]==0){book[tx][ty]=1;que[tail].x=tx;que[tail].y=ty;que[tail].p=tx;que[tail].q=ty;tail++;}if(tx==5&&ty==5){flag=1;break;}}if(flag==1)break;head++;}for(int i=1;i<=tail-1;i++)cout<<"("<<que[i].p<<","<<que[i].q<<")"<<endl;
}

因为单纯的bfs只能找到出迷宫最少用多少步,而无法找到最优路径的,并且会出现瞎跑的情况,显得非常zz,所以我又研究了好久,找到了一个比较简单的方法来走出迷宫

#include<iostream>
#include<cstdio>
using namespace std;
int a[100][100],book[100][100],sum,p[100],q[100],e[100],r[100];//定义了e,r两个数组来保存走过的最短路径
int small=9999;
void dfs(int x,int y,int step)
{int next[4][2]={ {0,1}, //表示走的方向{1,0},    {0,-1}, {-1,0} };int tx,ty;if(x==5&&y==5){ //判断是否走到迷宫出口if(step<small){ //更新最短距离small=step;//更新最短路径for(int i=0;i<=small;i++){// e[i]=p[i];r[i]=q[i];} } return;}for(int k=0;k<=3;k++){//枚举上下左右四种情况tx=x+next[k][0];ty=y+next[k][1];if(tx<1||tx>5||ty<1||ty>5)continue;if(a[tx][ty]==0&&book[tx][ty]==0){//判断是否能向下继续搜索book[tx][ty]=1;//标记这个点,防止下面重复p[step]=tx;//记录走的路径q[step]=ty;dfs(tx,ty,step+1);//继续向下搜索book[tx][ty]=0;//取消标记p[step]=0;q[step]=0;}}return;
}
int main()
{for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)scanf("%d",&a[i][j]);//输入迷宫book[1][1]=1;//标记起点dfs(1,1,0);//搜索开始cout<<"("<<0<<", "<<0<<")"<<endl;//输出起点位置for(int i=0;i<small;i++)//输出走过的最短路径cout<<"("<<e[i]-1<<", "<<r[i]-1<<")"<<endl;
}

因为我对dfs比较熟悉,所以我尝试了用dfs把每条能走出迷宫的路都找到,然后找出最短的那条路,再输出路径,这个方法虽然说简单,但迷宫很大的话可能就会超时,不过还好这个迷宫不算很大,不然我就真的要凉到里面了(虽然现在我也挺凉的)

题外话:
这是我第一次在没有大佬和队友帮助的情况下独立完成的一道题,对我来说不仅仅是一种收获,更是值得纪念的一件事吧,但距离我翻身还有很长的一段路要走,所以这只能算是一个小插曲,没什么值得高兴的(我是咸鱼的事实还是不会改变的),以后我还是会继续朝着翻身的目标努力的!!

咸鱼翻身之路——迷宫问题相关推荐

  1. 咸鱼翻身之路——我与农夫和牛的故事

    在前几天,本咸鱼认识了一个魔法师农夫,但他只对他的牛感兴趣,于是就有了一个有趣(才怪)的问题: 农夫约翰已被告知一头逃亡牛的下落,并希望立即抓住她.他从数字线上的N点(0≤N≤100,000)开始,牛 ...

  2. python迷宫起点终点所有路径_通向终点的路不止一条!python迷宫。

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 wei_Y 于 2014-11-24 19:53 编辑 2008121223547917 ...

  3. qt 3d迷宫游戏_玩游戏找不到路是如何成为常态的?游戏视角选择的得与失

    游戏刚开始兴起的时候,游戏视角还不是问题.由于画面技术的限制,早期的游戏无一例外都是2D平面画面.3D游戏兴起以后,设计者游戏视角的选择更加多样,在带来了更多样游戏体验的同时也劝退了大批游戏玩家.3D ...

  4. 迷宫找路(从起点找到终点)

    package org.structure.recursion;/*** 迷宫找路问题* @author cjj_1* @date 2020-08-11 10:09*/ public class Ma ...

  5. 笔试强训第三周编程题part01(年终奖,迷宫问题;微信红包,计算字符串的距离;小易的升级之路,找出字符串中第一个只出现一次的字符,洗牌)

    年终奖 OJ链接 此题是一道动态规划的问题 读题可知:只能从上往下和从左往右移动 由此需要前[i-1] [ j ]和[i][j-1]来比较大小来确实最优解. 其中有两种特殊情况,第一行和第一列 代码如 ...

  6. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  7. java栈 迷宫_利用栈实现迷宫的求解

    问题描述:这时实验心理学中的一个典型的问题,心理学家吧一只老鼠从一个无顶的大盒子的入口处赶进迷宫.迷宫设置很多隔壁,对前进方向形成了许多障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠仔迷宫中 ...

  8. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  9. 基础数据结构【三】————老鼠走迷宫问题————堆栈应用

    假设:老鼠在一个二维地图中i行走,地图中大部分路径被墙阻断,无法前进.老鼠可以按照尝试错误的方法找到出口.只是,这只老鼠必须具备走错路时候就退回来,并且把走过的路记下来,避免下次走重复路,知道找到出口 ...

最新文章

  1. 为什么 Java 中“1000==1000”为false,而”100==100“为true?
  2. .NET中使用NLog记录日志
  3. python数据处理实例-Python数据预处理实例详解
  4. Switch-case语句
  5. win主机ping不通linux的IP
  6. law是什么的缩写_Lawyer和Attorney 有什么不同?
  7. 2015年3月31号日志
  8. socket编程(六)
  9. 服务器日志监控系统怎么解决,服务器日志监控系统
  10. python程序写完怎么保存_python程序如何进行保存
  11. 电工模拟接线软件 app_配电柜接线图
  12. Db4o 新建、查询、更新、删除操作
  13. 计算机无法安装VC2015,解决win10安装vc ++2015提示“一个或多个问题导致了安装失败”的方法...
  14. ansys命令流力磁耦合仿真
  15. GPT-3的最强落地方式?陈丹琦提出小样本微调方法,比普通微调提升11%
  16. Make menuconfig详解(转)
  17. 计算机硬盘如何制作成移动硬盘,电脑拆出来的闲置硬盘别扔 这么做帮你把它变成移动硬盘...
  18. Spark学习笔记1(初始spark
  19. 网络安全 — 零信任网络访问(ZTNA)
  20. vt-x+linux子系统,虚拟机安装linux 系统(二 )解决 Intel VT-x 报错

热门文章

  1. 神州租车针对用户需求,实现租车服务的区域化覆盖
  2. 让textarea 只读
  3. MBA管理类联考英语二题型答题时间及次序问题
  4. 红黑树( 图解 + 秒懂 + 史上最全)
  5. linux运行一段时间变慢是什么原因,Linux系统变慢是什么原因
  6. vue3+elementPlus主题动态切换2022,亲测可用!
  7. 注意力机制(一):注意力提示、注意力汇聚、Nadaraya-Watson 核回归
  8. MySQL 约束(Constraint)
  9. 手把手教你如何用PhotoShop制作gif动画 (转)
  10. Selenium自动化案例