说明:

老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1表示老鼠行走的路径,试以程式求出由入口至出口的路径。

解法:

    老鼠的走法有上,下,左,右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,知道走到出口为至,这是返回的基本题,请直接看程式应就可以理解 

代码:

方法一

#include <stdio.h>
#include <stdlib.h>
int visit(int , int );
int maze[7][7] = {{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 startI = 1, startJ = 1;
int endI = 5, endJ = 5;
int success = 0;
int main(void)
{int i, j;printf("显示迷宫:\n");for(i = 0; i < 7; i++){for(j = 0; j < 7; j++){if(maze[i][j] == 2)printf("#");elseprintf(" ");}printf("\n");}if(visit(startI, startJ) == 0)printf("\n没有找到出口!\n");else{printf("\n显示路径:\n");for(i = 0; i < 7; i++){for(j = 0; j < 7; j++){if(maze[i][j] == 2)printf("#");else if(maze[i][j] == 1)printf("1");elseprintf(" ");}printf("\n");        }}return 0;
}
int visit(int i, int j)
{maze[i][j] = 1;if(i == endI && j == endJ)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);if(success != 1)maze[i][j] = 0; return success;
}

方法二.

#include <stdio.h>
#include <stdlib.h>
void visit(int ,int);
int maze[9][9] = {{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 startI = 1, startJ = 1;
int endI = 7, endJ = 7;
int main(void)
{int i, j;  printf("显示迷宫: \n");for(i = 0; i < 9; i++){for(j = 0; j < 9; j++){if(maze[i][j] == 2)printf("#");elseprintf(" ");}printf("\n");}visit(startI, startJ);return 0;
}void visit(int i, int j)
{int m, n;maze[i][j] = 1;if(i == endI && j == endJ){printf("\n显示路径:\n");for(m = 0; m < 9; m++){for(n = 0; n < 9; n++){if(maze[m][n] == 2)printf("#");else if(maze[m][n] == 1)printf("$");elseprintf(" ");}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);maze[i][j] = 0;
}

经典算法五--老鼠走迷宫相关推荐

  1. 【经典算法】老鼠走迷宫问题

    老鼠走迷宫问题及其多个变种 一.说明 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. 二.问题描述 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出口位 ...

  2. 算法:老鼠走迷宫问题

    算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出 ...

  3. c语言老鼠走迷宫课程设计,C语言算法之老鼠走迷宫

    1.Algorithm Gossip: 老鼠走迷官(一)说明:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法: ...

  4. C++经典算法题-老鼠走迷官(一)

    5.Algorithm Gossip: 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法 ...

  5. C++经典算法题-老鼠走迷官(二)

    6.Algorithm Gossip: 老鼠走迷官(二) 说明 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢? 解法 求所有路径看起来复杂但其实更简单,只要在老鼠走至出 ...

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

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

  7. c语言老鼠迷宫程序,C语言经典算法——老鼠走迷宫(二)

    说明 ​由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢? ​解法 ​求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置 ...

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

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

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

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

最新文章

  1. php 优化sql,php – 优化此SQL查询
  2. 随说秋色园从Access升迁到MSSQL过程
  3. 【干货】超全!华为交换机端口vlan详解~
  4. 树状数组基本用法详解
  5. [vue-element] ElementUI怎么修改组件的默认样式?
  6. createsemaphore 异常_浅析SPC之异常分析
  7. monkey操作,获取包名,参数,日志,百分比
  8. SpringBoot使用H2内嵌数据库
  9. sublime注释乱码c语言,ConvertToUTF8:解决 Sublime Text的乱码问题
  10. java 7 学习笔记_Java学习笔记7
  11. 225.队列实现栈 (力扣leetcode) 博主可答疑该问题
  12. duilib的通用窗口类WindowImplBase
  13. 怎么把英文字幕翻译成中文?快把这些方法收好
  14. 计算机中的打印机,如何添加打印机,教您电脑如何添加打印机
  15. minitools在win10上安装失败
  16. PS 把两张图片融合为一张
  17. 三元组事件抽取与简单代码实现
  18. python爬虫代码大作业_爬虫大作业
  19. PX4 Bootloader解析
  20. uniapp之自定义顶部样式

热门文章

  1. 留良乡投资理财知识怎么入门
  2. java sleep原理_Java线程休眠(sleep)示例
  3. 张一鸣“合成大西瓜”
  4. 基于java多特蒙德周边商城系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  5. visual studio 2022 编译 基于 C# 的 图表控件库 ScottPlot
  6. SqlSession was not registered for synchronization because synchronization is not active事务开启失败
  7. Js apply()使用详解
  8. 《游戏设计艺术(第2版)》——学习笔记(28)第28章 制作游戏的技术
  9. SAS中的report过程简介
  10. 如何才能让你自己变得更有价值?只需这一招就够了