采用递归算法求解迷宫问题,输出从入口到出口的所有路径。

递归求解我真的也不是理解的很透,但是明显感觉到递归和栈、队列求解很像,都是树形的搜索过程。

为了直观地观察过程,补充了一个动画过程,可以用来观察算法的搜索过程。

从(1,1)走到(8,8),实心圆是不允许走的,空心圆是可以走的部分,星星是走过的路径。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>#define MaxSize 100int mg[10][10] = {                         //迷宫{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},{1, 0, 0, 1, 0, 0, 0, 1, 0, 1},{1, 0, 1, 1, 0, 0, 0, 1, 0, 1},{1, 0, 0, 0, 0, 1, 1, 0, 0, 1},{1, 0, 1, 1, 1, 0, 0, 0, 0, 1},{1, 0, 0, 0, 1, 0, 0, 0, 0, 1},{1, 0, 1, 0, 0, 0, 1, 0, 0, 1},{1, 0, 1, 1, 1, 0, 1, 1, 0, 1},{1, 1, 0, 0, 0, 0, 0, 0, 0, 1},{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
char mg_graph[10][10];typedef struct {int i;int j;
}Box;typedef struct {Box data[MaxSize];int length;
}PathType;  //路径信息void mgpath(int xi, int yi, int xe, int ye, PathType& path);
void Show();PathType path;
int main()
{path.length = 0;mgpath(1,1,8,8,path);
}void mgpath(int xi,int yi,int xe,int ye, PathType &path)
{int di, k, i, j;int va=0;if (xi == xe && yi == ye)//找到出口{path.data[path.length].i = xi;path.data[path.length].j = yi;path.length++;printf("迷宫路径如下:\n");for (k = 0; k < path.length; k++)//输出路径{printf("\t(%d,%d)", path.data[k].i, path.data[k].j);if ((k + 1) % 10 == 0){printf("\n");}}printf("\n输入任意值继续\n");scanf_s("%d", &va);}else{if (mg[xi][yi] == 0){di = 0;while (di < 4){switch (di){case 0:i = xi - 1; j = yi; break;case 1:i = xi; j = yi + 1; break;case 2:i = xi + 1; j = yi; break;case 3:i = xi; j = yi - 1; break;}path.data[path.length].i = xi;path.data[path.length].j = yi;printf("(%d,%d)\n",xi,yi);path.length++;mg[xi][yi] = -1;Sleep(500);system("cls");Show();//mgpath(i, j, xe, ye, path);//进去搜索位置并刺探 xi == xe && yi == ye 条件path.length--;//为什么要减?mg[xi][yi] = 0;printf("di=%d\n", di);Sleep(500);system("cls");Show();//di++;}}}//递归体
}void Show()
{int i, j;for (i = 0; i < 10; i++){for (j = 0; j < 10; j++){if (mg[i][j] == 0){printf("O");}else if(mg[i][j] == 1){printf("●");}else if (mg[i][j] == -1){printf("☆");}}printf("\n");}printf("\n");
}

【数据结构】带动画显示过程的递归求解迷宫问题相关推荐

  1. 用栈和递归求解迷宫问题

    一.问题概述 小时候,我们都玩过走迷宫的游戏吧.看一下这个图例: 遇到这种问题时,我们第一反应都会先找到迷宫的入口点,然后对上下左右四个方向进行寻迹, 检测当前位置是否是通路,是否可以通过,直至找到出 ...

  2. 页面转发后文本显示???_使用Divi的滑动动画显示过程的进度

    欢迎来到这个由6章组成的系列的第3章,它将教你如何使用Divi的新"动画"选项设计出色的页面板块.我将向你介绍如何构建实时演示页面的不同部分,以向你展示向网站添加动画的技术.动画功 ...

  3. 递归 求解迷宫问题 Java

    目录 题目描述: 解题思路: 代码分析: 题目描述: 如图所示有一个 3X4 的迷宫,其中黑色方框代表墙,白色方框代表可通行,指定迷宫的入口和出口,计算出入口到出口的路径 解题思路: 1.先将迷宫地图 ...

  4. 迷宫的非递归求解 C语言 数据结构课程设计

    非递归求解迷宫问题 问题解决的实现 运行环境说明: 正常数据测试 有疑问看这里 源码及课程设计报告 更新一下以往的课程设计,希望能给相同课程设计的同学提供一个不一样的思路. 问题解决的实现 问题描述: ...

  5. 数据结构之迷宫问题求解(一)利用栈与递归求解出口

    本文适合于对迷宫问题已有初步研究,或阅读代码能力较强的人. 因此,如果你对迷宫问题一无所知,请参考其他更详细的资料. 迷宫问题,是一个对栈(Stack)典型应用的例子之一. 假如,有如下10X10的迷 ...

  6. 看动画学算法之:递归和递归树

    文章目录 简介 递归树和阶乘 斐波那契数列 GCD最大公约数 N中选K 0-1背包问题 硬币找零问题 数组的最长递增子序列 旅行商问题 简介 在之前我们介绍的很多数据结构和算法都用到了递归,递归非常容 ...

  7. 利用css transition属性实现一个带动画显隐的微信小程序部件

    我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会 ...

  8. android伸缩动画自定义,Android干货:自定义带动画的View

    对于一个自定义View来说,onMeasure只是用来计算View尺寸,onDraw()才是真正执行View的绘制,所以一般我们都需要重写onDraw()函数来绘制我们期望的UI界面,下面我以一个具体 ...

  9. html图片的隐藏与显示,Jquery中使用show()与hide()方法动画显示和隐藏图片

    (1)功能描述 在页面中单击"显示"连接,通过show()方法以动画的方式显示一幅图片,同时在方法中执行一个回调函数,用于改变图片的边框样式:单击已显示的图片时,通过hide()以 ...

最新文章

  1. 悉尼大学陶大程:遗传对抗生成网络有效解决GAN两大痛点
  2. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载
  3. pytorch 安装方法
  4. 【知识星球】图像降噪模型和数据集内容开启更新,经典问题永垂不朽!
  5. php运行环境largon,环境配置(一)
  6. gitlab 使用教程
  7. MongoDB第二天
  8. TIJ摘要:访问控制权限
  9. Linux C 存储映射IO
  10. python独立图形_Python图形界面(自学Python系列笔记-4)(不定期更新)
  11. querydsl动态 sql_Spring data jpa 复杂动态查询方式总结
  12. Flink : The object probably contains or references non-serializable fields.
  13. 语言专升本必背代码_广东省 2021 年普通高等学校专升本招生学科门类与专业基础课对应表...
  14. python中类的定义_python 类中定义类
  15. 查找算法之六 哈希查找(C++版本)
  16. matlab对文件夹的遍历
  17. alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
  18. A/B【费马小定理】
  19. surface pro 7 使用type c耳机问题
  20. FPGA——SPI总线控制flash(3)含代码

热门文章

  1. java五子棋小游戏含免费源码
  2. access/sql server笔记(20160818)
  3. 百度地图api根据地图缩放等级显示不同的marker点,功能二
  4. VUE 组件手动渲染、组件延迟渲染
  5. vue2中provide/inject的使用和响应式传值
  6. 工业物联网·能耗监控智慧空调接入华为云解决方案
  7. Spark RDD编程模型及算子介绍(二)
  8. 用Android 写生成的梅花
  9. Ubuntu安装Nixnote,解决印象笔记(国服/中国区)登录不能显示输入密码的问题
  10. 机器学习15-k-均值算法表述