深搜算法实例:老鼠走迷宫(一)
这个是简单的深搜,应该输入深搜中抛砖型的,联系下代码,回顾一下深搜的思想。
本题的要求是,在开始点(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这里说明,找到一条就不再找别的路线了),没有的话就接着深搜,直到遍历完所有的节点发现到底有没有通路存在。
总的来说这个作为深搜的入门挺不错,没有难度,还有点小趣,同时还能再回顾下递归的思想
深搜算法实例:老鼠走迷宫(一)相关推荐
- 算法:老鼠走迷宫问题
算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出 ...
- c语言老鼠走迷宫课程设计,C语言算法之老鼠走迷宫
1.Algorithm Gossip: 老鼠走迷官(一)说明:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法: ...
- 【经典算法】老鼠走迷宫问题
老鼠走迷宫问题及其多个变种 一.说明 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. 二.问题描述 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出口位 ...
- 经典算法五--老鼠走迷宫
说明: 老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1表示老鼠行走的路径,试以程式求出由入口至出口的路径. 解法: 老鼠的走法有上,下,左,右四个方向,在每前进一格之后就选 ...
- 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)
C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...
- C语言-老鼠走迷宫(深度寻路算法)
老鼠走迷宫-c语言(基于深度优先的寻路算法) 这个是学校的课设,刚开始有点头疼,但是感觉越做越有意思了,于是就有如下代码,可能相较于大佬还有差距,但是这是我目前所能做的最优的程序了吧! 话不多说,说一 ...
- C语言老鼠走迷宫(单路径)算法详细讲解
最近在学习C语言的一些经典算法,其中遇到了一点困难,导致卡进度了.琢磨了很久,在绘制流程图时,突然灵感大开理解了,老鼠走迷宫算法的奇妙.所以写了这个,一来是方便以后右和我类似的同学自学时,遇到这个问题 ...
- Java算法六:老鼠走迷宫
老鼠走迷宫(Mouse) 问题说明: 老鼠走迷宫是循环求解的基本类型,我们在二维数组中用2来表示迷宫的墙壁,使用1来表示老鼠的行走路径,并用程序求出从入口到出口的距离. 问题解答: 实际上是使用回溯算 ...
- java老鼠走迷宫算法_老鼠走迷宫java算法
说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选一个 ...
最新文章
- JVM体系结构101:了解您的虚拟机
- 输入缓冲区对程序的影响及解决方法(多种语言都会出现)
- 家居海报PSD模板,是否也是你理想的生活!
- AFNetWork 学习资源....
- matlab菜单的中文意思,matlab菜单制作
- [机器学习] 机器学习中所说的“线性模型”是个什么东西?
- Java面试题:面向对象的特征有哪些方面?
- tensorflow构建CNN模型时的常用接口函数
- 传统CPU架构不再是高性能计算唯一选择
- HTTP的基础知识——HTTP协议
- c# mysql登录界面_C#窗体控件与MySQL实现登录功能
- sql的简单的增删改查
- 展27类移动信息化解决方案,数字天堂2010通信展惊艳亮相
- 计算机网络的发展历程,你真的清楚吗
- uni-app指定端口号
- C++开发STM32 Makefile工程
- jvm---6.1、dump 文件分析工具 IBM HeapAnalyzer
- Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
- 怎么用计算机算组合,御魂组合计算器
- 电机控制基础——定时器基础知识与PWM输出原理
热门文章
- 第8章第2节:制作企业宣传册的封面幻灯片 [PowerPoint精美幻灯片实战教程]
- 实现自己的mystring.h
- 根据ajax控制css样式,JQuery CSS样式控制 学习笔记
- C语言一个小时实现简易三子棋,看看你能不能让愚蠢的电脑获胜,还不快上手试试吗(无AI算法)
- 思科仿真实验--RIP协议动态路由配置
- 网站不收录或者没排名的六点原因分析
- Mobox多人共同在线文档协同编辑的技术实现
- Install Prometheus Monitoring On Kubernetes Cluster
- Docker 安装 rancher
- MPTCP 源码分析(一) MPTCP的三次握手