深搜算法实例:老鼠走迷宫(一)

简介: 这个是简单的深搜,应该输入深搜中抛砖型的,联系下代码,回顾一下深搜的思想。 本题的要求是,在开始点(1,1)和终点(5,5)放一只老鼠,让老鼠找到一条路径走出去(暂时不考虑最短路径),找到后输出路径。

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


#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define FAIL 0

int 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("*");
            else
                printf(" ");
        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("@");
                    else
                        printf(" ");
                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这里说明,找到一条就不再找别的路线了),没有的话就接着深搜,直到遍历完所有的节点发现到底有没有通路存在。
总的来说这个作为深搜的入门挺不错,没有难度,还有点小趣,同时还能再回顾下递归的思想

目录
相关文章
|
4月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
3月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
60 0
|
5月前
|
算法 Python
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
100 0
|
6月前
|
算法 索引 Python
逆袭算法界!Python分治法、贪心算法、动态规划深度剖析,带你走出算法迷宫!
【7月更文挑战第8天】分治法,如快速排序,将大问题分解并合并解;贪心算法,选择局部最优解,如活动选择;动态规划,利用最优子结构避免重复计算,如斐波那契数列。Python示例展示这些算法如何解决实际问题,助你精通算法,勇闯迷宫。
56 1
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】贝叶斯算法在机器学习中的应用与实例分析
【机器学习】贝叶斯算法在机器学习中的应用与实例分析
589 1
|
7月前
|
算法
数据结构与算法-DFS+BFS篇(迷宫问题)
数据结构与算法-DFS+BFS篇(迷宫问题)
104 3
|
7月前
|
存储 算法
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
|
7月前
|
人工智能 算法 搜索推荐
Java算法编程详解和程序实例
Java算法编程详解和程序实例
77 0
|
7月前
|
机器学习/深度学习 算法 数据可视化
K-means聚类算法:原理、实例与代码分析
K-means聚类算法:原理、实例与代码分析
1516 0
|
7月前
|
存储 算法
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
81 0

热门文章

最新文章