c语言实现老鼠走迷宫

在没有智能手机的时代,不少人玩游戏会玩老鼠走迷宫这样的闯关游戏。每一关有着不同的地图场景,可能还会充斥着各种障碍。

老鼠走迷宫是经典的递回求解的算法题

我们用二维数组表示迷宫场景。其中用2代表迷宫的墙壁,0代表可行通道。

我们用7*7的二维数组具体实现,假定我们设置[1][1]是迷宫入口,[5][5]是迷宫出口。

#define M 7

int maze[M][M] =

{

{2,2,2,2,2,2,2},

{2,0,0,0,0,0,2},

{2,0,2,0,2,0,2},

{2,0,0,2,0,2,2},

{2,2,0,2,0,2,2},

{2,0,0,0,0,0,2},

{2,2,2,2,2,2,2}

};

int start1=1,start2=1;

int end1=5,end2=5;

int main ()

{

int i,j;

printf("显示迷宫:\n");

for(i=0;i

{

for(j=0;j

if(maze[i][j] == 2)

printf("?");

else

printf(" ");

printf("\n");

}

}

这样我们的迷宫绘制基本完成。下面我们对老鼠可能行走的路径进行分析输出。

我们定义一个visit函数,对老鼠行走方向进行逻辑分析。我们把老鼠走的路径记作1,也就是数组中的0被改为1 。

int success = 0; //声明全局变量,若到达出口,将被赋值为1

int visit(int i,int j)

{

maze[i][j] = 1; //传过来的位置一定是老鼠所行路径,赋值为1

if(i==end1 && j==end2) //判断是否到达[5][5]出口位置

success = 1;

//判断是否到达出口,没有则分析老鼠可以在迷宫移动的方向,并递归求下一步.

if(success != 1 && maze[i][j+1] == 0) //老鼠先尝试向右,如果可行就递归,不行则往下判定

visit(i,j+1);

if(success != 1 && maze[i+1][j] == 0) //老鼠尝试向下,如果可行就递归,不行则往下判定

visit(i+1,j);

if(success != 1 && maze[i][j-1] == 0) //老鼠尝试向左,如果可行就递归,不行则往下判定

visit(i,j-1);

if(success != 1 && maze[i-1][j] == 0) //最后一歩方向判定,老鼠尝试向上,如果可行就递归。

visit(i-1,j);

//判断是否到达出口,没有则证明前面走的路径并不能到达出口,那么返回,把走过的位置重新写作0

if(success != 1)

maze[i][j] = 0;

return success;

}

我们写好老鼠的行走路径后,在主函数中调用,并且输出。

以下代码写在主函数中

if(visit(start1,start2) == 0) //调用visit函数,判断老鼠是否走出迷宫

printf("\n没有找到出口!\n");

else{

printf("\n显示路径:\n");

for(i=0;i

{

for(j=0;j

{

if(maze[i][j] == 2) //当值为2时是墙壁

printf("?");

else if(maze[i][j] == 1) //当值为1时是路径

printf("??");

else

printf(" ");

}

printf("\n");

}

}

输出:

显示迷宫:

???????

? ?

? ? ? ?

? ? ??

?? ? ??

? ?

???????

显示路径:

???????

??? ?

???? ? ?

?????? ??

????? ??

? ?????????

???????

以上是老鼠走迷宫问题的单个解决方法,迷宫未必只有一条路可以走。那么求多条路会不会很麻烦呢?

当然不会,只要单一路径解决了,多条路解决方案无非就是在单一路径稍作修改,对可行路径进行遍历就可以了。

下面是全部代码:

#include

#include

#define M 9

//把迷宫加大成9*9格局

int maze[M][M] =

{

{2,2,2,2,2,2,2,2,2},

{2,0,0,0,0,0,0,0,2},

{2,0,2,2,0,2,2,0,2},

{2,0,2,0,0,2,0,0,2},

{2,0,2,0,2,0,2,0,2},

{2,0,0,0,0,0,2,0,2},

{2,2,0,2,2,0,2,2,2},

{2,0,0,0,0,0,0,0,2},

{2,2,2,2,2,2,2,2,2}

};

int start1=1,start2=1; //假定[1][1]是入口

int end1=7,end2=7; //假定[7][7]是出口

void visit(int i,int j)

{

int m,n;

maze[i][j] = 1;

if(i==end1 && j==end2) //判断是否到达[5][5]出口位置,到达直接输出

{

printf("\n显示路径:\n");

for(m=0;m

{

for(n=0;n

{

if(maze[m][n] == 2)

printf("?");

else if(maze[m][n] == 1)

printf("??");

else

printf(" ");

}

printf("\n");

}

}

//不再判定是否到达出口,只分析老鼠可以在迷宫移动的方向,并递归求下一步.

if(maze[i][j+1] == 0)

visit(i,j+1);

if(maze[i+1][j] == 0)

visit(i+1,j);

if(maze[i][j-1] == 0)

visit(i,j-1);

if(maze[i-1][j] == 0)

visit(i-1,j);

//若代码运行到这一步,则证明前面走的路径并不能到达出口,则返回,把走过的位置重新写作0

maze[i][j] = 0;

}

int main ()

{

int i,j;

printf("显示迷宫:\n");

for(i=0;i

{

for(j=0;j

if(maze[i][j] == 2)

printf("?");

else

printf(" ");

printf("\n");

}

visit(start1,start2); //直接调用visit函数,把输出内容放在visit函数中,好让所有路径进行遍历

return 0;

}

老鼠走迷宫的算法是不是挺有意思呢?有能力的话还可以把老鼠走迷宫扩展成一个可以控制方向小游戏。

c语言 老鼠乘法,c语言-老鼠走迷宫逐步理解相关推荐

  1. c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”

    C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...

  2. c语言累乘法,C语言基本算法

    C语言基本算法 学习C语言一定要搞清楚C语言的基本算法,下面小编为大家介绍C语言基本算法吧,希望对大家有帮助! 1.交换(两量交换借助第三者) 例1.任意读入两个整数,将二者的值交换后输出. main ...

  3. 智能机器人走迷宫c语言游戏,(动态规划)机器人走迷宫问题(示例代码)

    题目一:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tP ...

  4. 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)

    C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...

  5. C语言-老鼠走迷宫(深度寻路算法)

    老鼠走迷宫-c语言(基于深度优先的寻路算法) 这个是学校的课设,刚开始有点头疼,但是感觉越做越有意思了,于是就有如下代码,可能相较于大佬还有差距,但是这是我目前所能做的最优的程序了吧! 话不多说,说一 ...

  6. C语言老鼠走迷宫(单路径)算法详细讲解

    最近在学习C语言的一些经典算法,其中遇到了一点困难,导致卡进度了.琢磨了很久,在绘制流程图时,突然灵感大开理解了,老鼠走迷宫算法的奇妙.所以写了这个,一来是方便以后右和我类似的同学自学时,遇到这个问题 ...

  7. C语言 老鼠走迷宫详解6,算法: Mazing-老鼠走迷宫

    说明 老鼠走迷宫是递回求解的基本题型.我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,尝试以程式求由入口至出口的路径. 解法 老鼠可走上,下,左,右四个方向.入口一般在左上,出 ...

  8. C语言实现老鼠走迷宫(附源码)

    CSDN源码下载:C语言实现老鼠走迷宫.zip 1.需求分析   利用二维数组创建一个随机迷宫或者自定义迷宫,再在迷宫中找到一条从起点到终点的路径,并用图形界面显示. 2.概要设计 3.详细设计 输入 ...

  9. java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)

    /*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...

最新文章

  1. mysql远程服务器返回错误404未找到_远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。...
  2. excel取整函数_数据分析小白学习之路(三)——Excel多练熟能生巧
  3. 简事二三 之 http缓存机制
  4. boost::intrusive::circular_slist_algorithms用法的测试程序
  5. 台积电要造第一款7nm芯片 明年下半年可投产
  6. 【简洁代码】1053 住房空置率 (20分)_22行代码AC
  7. 800多名各国院士热忱参与 第三届“科学探索奖”名单公布
  8. C++ Maps MultiMaps
  9. 一个智能运维算法测试方法
  10. Deepin2014 QT Creator安装
  11. aws rds 加密_AWS RDS SQL Server中的透明数据加密(TDE)
  12. 算法导论-15.5-4
  13. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。
  14. 米奇emoji_一些常用的 Emoji 符号(可直接复制)
  15. 嵌入式Linux开发与单片机开发的区别
  16. php 汉字unico编码范围,汉字 Unicode 编码范围
  17. 淘晶驰串口屏下载工程慢怎么办
  18. 国产化Demo(dm7+Tongweb7+java)
  19. GPS测速仪,一个APP就可以搞定
  20. adb安装apk文件时的常见的错误及解决方法

热门文章

  1. Cadence OrCAD Capture 原理图设计过程产生的文件总结与说明
  2. Docker提交天池比赛流程
  3. 日本房产泡沫的崩塌,虽然很长,希望80后仔细阅读
  4. 开源录屏软件Captura安装和使用
  5. 爆爆爆!!Deep Mind与Google Brain合并,成立 Google DeepMind 新部门
  6. PDF怎么转换成jpg图片
  7. 程序员,你真的会写简历吗?
  8. qstock量化选股实战
  9. python使用turtle库、绘制一个八边形_【Python】turtle八边形绘制
  10. lol8月7号服务器维护,LOL8月7日更新了什么内容 8.15新版本更新维护公告