题目描述:

小老鼠Jerry生活在一个庞大的迷宫里,每天靠吃奶酪填饱自己的肚子。一天,它发现自己辛辛苦苦攒积的奶酪不见了。于是在迷宫里开始它的搜寻计划。迷宫是一个N*M(N,M均不超过20)的棋盘,如下图所示:

########

#.####.#

#..#..C#

#.M#..##

#..#..##

#.##...#

#......#

########

其中,“#”表示为一堵墙,Jerry是不能呆在上面的;“.”表示为空地,Jerry可以在上面任意经过,可以自由的向上下左右四个方向行走; “M”表示Jerry开始所在的位置,“C”表示奶酪所在的位置。

你的任务是:在输入中给你迷宫的描述,请问JERRY是否能找回它的奶酪?(也就是JERRY不穿过墙,只在空地上行走,是否存在一条从开始位置到奶酪所在位置的一条道路)。

输入格式:

每个输入文件有多组数据,以0 0作为结束符。每组数据第一行为N和M表示,迷宫有N行M列。接下来N行,每行M个字符描述着迷宫的形状。

输出格式:

对于每组数据,如果JERRY能找到奶酪,就输出“^_^”,否则输出“-_-”。每组数据的结果占据一行。

示例:

输入

8 8

########

#M####.#

#..#..C#

#..#..##

#..#..##

#.##...#

#......#

########

3 5

#####

#M#C#

#####

0 0

输出

^_^

-_-

代码如下:

#include <stdio.h>
#include <stdlib.h>

int n,m,min=99999999,flag=0;
char a[21][21],book[21][21];

// 起点坐标
int startx = 1;
int starty = 1;
// 终点坐标
int finalx = 1;
int finaly = 1;

void dfs(int x,int y,int step){
// 定义一个方向数组
int next[4][2] = {
{ 0, 1}, // 向右走
{ 1,0 }, // 向下走
{ 0, -1 }, // 向左走
{ -1,0 } // 向上走
};
int tx,ty,k;

// 判断是否到达C
if ( x==finalx && y==finaly) {
if(step<min){
min = step;
flag=1;
}
return ;
}

// 枚举四种走法
for( k=0;k<=3;k++ ){
tx = x+next[k][0];
ty = y+next[k][1];

// 判断是否越界
if (tx<1 || tx > n || ty<1 || ty>m ) {
continue;
}
// 判断是否为障碍物或者已经再路径中
if ( a[tx][ty]=='.' && book[tx][ty]==0 ){
book[tx][ty] = 1; // 标记这个点已经走过
dfs(tx,ty,step+1); // 开始尝试下一个点
book[tx][ty] = 0; // 尝试结束,取消这个点的标记
}
}
return ;
}
int main()
{
int i,j;
// 输入n和m,n为行,m为列
scanf("%d%d",&n,&m);
getchar();
while(n!=0&&m!=0){
// 读入迷宫
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++){
scanf("%c",&a[i][j]);
}
getchar();
}

// 读入起点和终点坐标
// scanf("%d %d %d %d",&startx,&starty,&p,&q);

// 找起点坐标

for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[i][j]=='M'){
startx=i;
starty=j;
a[i][j]='.';
}
}
}
// 找终点坐标
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[i][j]=='C'){
finalx=i;
finaly=j;
a[i][j]='.';
}
}
}

// 从起点开始搜索
book[startx][starty] = 1; // 标记起点再路径中,防止后面重复走

dfs(startx,starty,0);

printf("JERRY的位置为:%d %d\n",startx,starty);
printf("奶酪的位置为:%d %d\n",finalx,finaly);

if(flag){
printf("^^ ^^\n");
printf(" __\n\n");
printf("最少可以经过%d步找到奶酪\n",min);
}else{
printf("不能找到奶酪!\n");
printf("__ __\n");
printf("\n");
printf(" __ \n\n");
}

scanf("%d%d",&n,&m);
getchar();
// 起点坐标
startx = 1;
starty = 1;
// 终点坐标
finalx = 1;
finaly = 1;
flag = 0;
}

getchar();getchar();
return 0;
}

运行截图如下:

转载于:https://www.cnblogs.com/ncuhwxiong/p/7073439.html

深度优先算法--判断迷宫的一个起点能否到达一个终点相关推荐

  1. 利用广度优先和深度优先算法解决迷宫问题【算法设计与分析】<图搜索问题>

    实验问题: 给定一个n*n的迷宫,要求利用广度优先和深度优先算法解决迷宫问题 问题分析: 对于此问题首先要明确搜索顺序 可以分为两种方法求解问题:1.广度优先算法2.深度优先算法 (1)对于深度优先算 ...

  2. 采用矩阵+深度优先算法解决迷宫问题

    所谓深度优先算法,百科的解答是这样的 深度优先搜索算法(Depth-First-Search),简称DFS,是搜索算法的一种.是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所有边都己被 ...

  3. 《啊哈算法》 解救小哈(深度优先算法——走迷宫实战) P86

    #include <stdio.h>int n, m, p, q, min=999999; //n和m分别为行和列, p和q分别为终点的x,y坐标, min是最小步数 int a[51][ ...

  4. delphi adoquery 上一个下一个_从一个起点冲向下一个起点

    瑞洁包头市公安局交通管理支队河西交警大队服务部是瑞洁2020年度八个优秀项目之一.今年以来,服务部力推"标准工程"."优化工程"."弯腰工程" ...

  5. C语言实现一个走迷宫小游戏(深度优先算法)

    补充一下,先前文章末尾给出的下载链接的完整代码含有部分C++的语法(使用Dev-C++并且文件扩展名为.cpp的没有影响),如果有的朋友使用的语言标准是VC6的话可能不支持,所以在修改过后再上传一版, ...

  6. 基于深度优先算法和A*算法的迷宫游戏开发(Java实现)

    先上图 文章目录 一.实验内容 二.深度优先算法生成迷宫 三.A*算法走迷宫 四.结果测试 五.源代码 六.参考文献 一.实验内容 1.要求: 1)迷宫随机生成 2)系统用A*算法寻路,输出路径 3) ...

  7. 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI

    原标题:算法应用实践:如何用Python写一个贪吃蛇AI 前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势 ...

  8. 手动搜索迷宫游戏 c语言,C语言实现一个走迷宫小游戏(深度优先算法)

    接上一篇万年历博文,还是那位朋友的练习题.这次是使用C语言做一个小游戏程序,三选一(2048.8皇后和迷宫游戏),我选择的是迷宫(文章末尾有程序截图).个人认为这个程序的难点在于迷宫地图的绘制,也就是 ...

  9. 动画演示深度优先算法搜寻逃出迷宫的路径

    深度优先算法(DFS 算法)是什么? 寻找起始节点与目标节点之间路径的算法,常用于搜索逃出迷宫的路径.主要思想是,从入口开始,依次搜寻周围可能的节点坐标,但不会重复经过同一个节点,且不能通过障碍节点. ...

最新文章

  1. php传输数组给axios
  2. 30天敏捷结果(19):你在为谁做事?
  3. navicat怎么导出mysql_navicat怎么把数据库导出
  4. [转]收集android上开源的酷炫的交互动画和视觉效果:Interactive-animation
  5. HoloLens开发手记-全息Hologram
  6. 2021牛客暑期多校训练营7 B-xay loves monotonicity(线段树+不降子序列)
  7. 域嵌套太深_pyspark如何修改嵌套结构域
  8. 轻量化网络MobileNet解析
  9. Android EditText 赋值与取值
  10. 应用安全测试的发展趋势
  11. MyBatis 学习之路其一:使用mybatis 创建一个简单的程序
  12. 计算机电源管理设置,如何修改计算机中设置的显卡电源管理模式
  13. 没有什么软文是营销圈拯救不了的?
  14. Bootstrap4动态切换主题
  15. 微信小程序渐变色按钮,好看的小程序按钮样式
  16. 推荐几款炫酷的 MySQL 可视化管理工具!好用到爆!!
  17. python基于pingouin包进行统计分析:使用tost函数执行单样本的双单侧检验(TOST)、以dataframe的形式输出分析结果(包含p值、自由度、bound等)
  18. vspython版本控制_git进行版本控制心得详谈
  19. 2021年A特种设备相关管理(锅炉压力容器压力管道)考试报名及A特种设备相关管理(锅炉压力容器压力管道)免费试题
  20. 如何利用图新地球基于地形数据进行坡度分析?

热门文章

  1. 大数据标准化白皮书正式发布
  2. Canvas的save和restore方法
  3. nginx 安装禅道
  4. XenDesktop5.0 Add Host使用vSphere5.1客户端注意事项
  5. linux script $,linux的script命令
  6. bootstrap table php,bootstrap table Tooltip
  7. 【Linux】Centos7 解压zip文件
  8. JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)...
  9. NOIP模拟题——dun
  10. 10.外观模式(Facade Pattern)