c语言 老鼠乘法,c语言-老鼠走迷宫逐步理解
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语言-老鼠走迷宫逐步理解相关推荐
- c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”
C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...
- c语言累乘法,C语言基本算法
C语言基本算法 学习C语言一定要搞清楚C语言的基本算法,下面小编为大家介绍C语言基本算法吧,希望对大家有帮助! 1.交换(两量交换借助第三者) 例1.任意读入两个整数,将二者的值交换后输出. main ...
- 智能机器人走迷宫c语言游戏,(动态规划)机器人走迷宫问题(示例代码)
题目一:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tP ...
- 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)
C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...
- C语言-老鼠走迷宫(深度寻路算法)
老鼠走迷宫-c语言(基于深度优先的寻路算法) 这个是学校的课设,刚开始有点头疼,但是感觉越做越有意思了,于是就有如下代码,可能相较于大佬还有差距,但是这是我目前所能做的最优的程序了吧! 话不多说,说一 ...
- C语言老鼠走迷宫(单路径)算法详细讲解
最近在学习C语言的一些经典算法,其中遇到了一点困难,导致卡进度了.琢磨了很久,在绘制流程图时,突然灵感大开理解了,老鼠走迷宫算法的奇妙.所以写了这个,一来是方便以后右和我类似的同学自学时,遇到这个问题 ...
- C语言 老鼠走迷宫详解6,算法: Mazing-老鼠走迷宫
说明 老鼠走迷宫是递回求解的基本题型.我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,尝试以程式求由入口至出口的路径. 解法 老鼠可走上,下,左,右四个方向.入口一般在左上,出 ...
- C语言实现老鼠走迷宫(附源码)
CSDN源码下载:C语言实现老鼠走迷宫.zip 1.需求分析 利用二维数组创建一个随机迷宫或者自定义迷宫,再在迷宫中找到一条从起点到终点的路径,并用图形界面显示. 2.概要设计 3.详细设计 输入 ...
- java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)
/*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...
最新文章
- mysql远程服务器返回错误404未找到_远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。...
- excel取整函数_数据分析小白学习之路(三)——Excel多练熟能生巧
- 简事二三 之 http缓存机制
- boost::intrusive::circular_slist_algorithms用法的测试程序
- 台积电要造第一款7nm芯片 明年下半年可投产
- 【简洁代码】1053 住房空置率 (20分)_22行代码AC
- 800多名各国院士热忱参与 第三届“科学探索奖”名单公布
- C++ Maps MultiMaps
- 一个智能运维算法测试方法
- Deepin2014 QT Creator安装
- aws rds 加密_AWS RDS SQL Server中的透明数据加密(TDE)
- 算法导论-15.5-4
- 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。
- 米奇emoji_一些常用的 Emoji 符号(可直接复制)
- 嵌入式Linux开发与单片机开发的区别
- php 汉字unico编码范围,汉字 Unicode 编码范围
- 淘晶驰串口屏下载工程慢怎么办
- 国产化Demo(dm7+Tongweb7+java)
- GPS测速仪,一个APP就可以搞定
- adb安装apk文件时的常见的错误及解决方法