这个是简单的深搜,应该输入深搜中抛砖型的,联系下代码,回顾一下深搜的思想。
本题的要求是,在开始点(1,1)和终点(5,5)放一只老鼠,让老鼠找到一条路径走出去(暂时不考虑最短路径),找到后输出路径。
最简单的想法就是对于上下左右四个进行刨根型的搜索,找到就返回输出,进入死胡同了就原路返回,找最近的有其他路径的点,继续搜索,知道找出为止。
下面是代码部分。


#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define FAIL 0int visit(int,int);
void map();
void route();int maze[7][7]={{2,2,2,2,2,2,2},{2,0,0,0,0,0,2},{2,0,0,0,2,0,2},{2,0,0,0,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 start_i=1,start_j=1;
int end_i=5,end_j=5;
int flag=FAIL;int main(void)
{map();route();return 0;
}void map()
{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");}
}void route()
{int i,j;if(visit(start_i,start_j)==FAIL)printf("\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("@");elseprintf(" ");printf("\n");}}
}int visit(int i,int j)
{maze[i][j]=1;if(i==end_i && j==end_j)flag=SUCCESS;if(flag==FAIL && maze[i][j+1]==0)visit(i,j+1);if(flag==FAIL && maze[i+1][j]==0)visit(i+1,j);if(flag==FAIL && maze[i-1][j]==0)visit(i-1,j);if(flag==FAIL && maze[i][j-1]==0)visit(i,j-1);if(flag==FAIL)maze[i][j]=0;return flag;
}

从上面的分析中我们只看visit()函数
我们用了0,1,2三个数表示地图某一点的状态:

1.0表示无障碍
2.1表示通路中的一点
3.2表示障碍

并用一个数组保存
我们看到,在visit()函数中进行了函数自身调用(可以看做是递归),这里是先朝着右边搜索,然后是上,下,左,如果还能往下走就接着往下走,走到不能再走为止。如果是死胡同,则就退到上一节点(这就是回溯了,在代码中的maze[i][j]=0表现),在新的节点继续试探,看有没有能一直走到终点的路线,一旦找到就马上返回(在flag=SUCCESS这里说明,找到一条就不再找别的路线了),没有的话就接着深搜,直到遍历完所有的节点发现到底有没有通路存在。
总的来说这个作为深搜的入门挺不错,没有难度,还有点小趣,同时还能再回顾下递归的思想

深搜算法实例:老鼠走迷宫(一)相关推荐

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

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

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

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

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

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

  4. 经典算法五--老鼠走迷宫

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

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

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

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

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

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

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

  8. Java算法六:老鼠走迷宫

    老鼠走迷宫(Mouse) 问题说明: 老鼠走迷宫是循环求解的基本类型,我们在二维数组中用2来表示迷宫的墙壁,使用1来表示老鼠的行走路径,并用程序求出从入口到出口的距离. 问题解答: 实际上是使用回溯算 ...

  9. java老鼠走迷宫算法_老鼠走迷宫java算法

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

最新文章

  1. JVM体系结构101:了解您的虚拟机
  2. 输入缓冲区对程序的影响及解决方法(多种语言都会出现)
  3. 家居海报PSD模板,是否也是你理想的生活!
  4. AFNetWork 学习资源....
  5. matlab菜单的中文意思,matlab菜单制作
  6. [机器学习] 机器学习中所说的“线性模型”是个什么东西?
  7. Java面试题:面向对象的特征有哪些方面?
  8. tensorflow构建CNN模型时的常用接口函数
  9. 传统CPU架构不再是高性能计算唯一选择
  10. HTTP的基础知识——HTTP协议
  11. c# mysql登录界面_C#窗体控件与MySQL实现登录功能
  12. sql的简单的增删改查
  13. 展27类移动信息化解决方案,数字天堂2010通信展惊艳亮相
  14. 计算机网络的发展历程,你真的清楚吗
  15. uni-app指定端口号
  16. C++开发STM32 Makefile工程
  17. jvm---6.1、dump 文件分析工具 IBM HeapAnalyzer
  18. Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
  19. 怎么用计算机算组合,御魂组合计算器
  20. 电机控制基础——定时器基础知识与PWM输出原理

热门文章

  1. 第8章第2节:制作企业宣传册的封面幻灯片 [PowerPoint精美幻灯片实战教程]
  2. 实现自己的mystring.h
  3. 根据ajax控制css样式,JQuery CSS样式控制 学习笔记
  4. C语言一个小时实现简易三子棋,看看你能不能让愚蠢的电脑获胜,还不快上手试试吗(无AI算法)
  5. 思科仿真实验--RIP协议动态路由配置
  6. 网站不收录或者没排名的六点原因分析
  7. Mobox多人共同在线文档协同编辑的技术实现
  8. Install Prometheus Monitoring On Kubernetes Cluster
  9. Docker 安装 rancher
  10. MPTCP 源码分析(一) MPTCP的三次握手