迷宫问题我们都知道,在一张地图中寻找一条路可以走出去,所以我们可以建立这样一个地图

如图所示,我们的思路是这样的:我们可以规定0就是墙,而1 就是我们要走的路,可以落脚后,我们就将走过的点标记为2
然后顺时针递归探测下一个可以落脚的点,通过回溯法,我们就可以通过栈结构完成我们最简单的迷宫寻路
回溯法
我们从入口点进入,进行搜索路线,如果我们发现当前道路不通的时候,我们就会回溯到上一个点,然后判断能不能继续走,如果还是不能,那么我们就继续回溯,直到找到可以走的点
下面就是我们的代码具体实现

maze.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>#define MAX_ROW 6
#define MAX_COL 6typedef struct maze{int map[MAX_ROW][MAX_COL];
}maze;
typedef struct point{int row;int col;
}point;
typedef point seqstacktype;
typedef struct seqstack{seqstacktype *data;size_t size;size_t capacity;
}seqstack;
maze.c#include "maze.h"int map[MAX_ROW][MAX_COL] = {{0,1,0,0,0,0},{0,1,1,1,0,0},{0,1,0,1,1,0},{0,1,1,0,0,0},{0,0,1,0,0,0},{0,0,1,0,0,0}
};
void mazeinit(maze *maze)
{if(maze == NULL){return;}size_t i = 0;for(;i<MAX_ROW;i++){size_t j = 0;for(;j<MAX_COL;j++){maze->map[i][j] = map[i][j];}}return;
}void mazeprint(maze *maze)
{if(maze == NULL){return;}size_t i = 0;for(;i<MAX_ROW;i++){size_t j = 0;for(;j<MAX_COL;j++){printf("%2d",maze->map[i][j]);}printf("\n");}
}int canstay(maze *maze,point cur)
{if(cur.row < 0 ||cur.row > MAX_ROW || cur.col < 0 ||cur.col >MAX_COL) {return 0;}if(maze->map[cur.row][cur.col] == 1){return 1;}return 0;
}
void mark(maze *maze,point cur)
{maze->map[cur.row][cur.col] = 2;return;
}
int isexit(maze *maze,point cur,point entry)
{if(cur.row == entry.row &&cur.col == entry.col){//说明检测的当前点就是入口点return 0;}if(cur.row == 0 || cur.row == MAX_ROW-1 || cur.col == 0 || cur.col == MAX_COL-1){return 1;}return 0;
}void _getpash(maze *maze,point cur,point entry,seqstack *cur_pash,seqstack *short_pash)
{printf("cur:(%d,%d)\n",cur.row,cur.col);if(!canstay(maze,cur)){return;}mark(maze,cur);seqstack_pushback(cur_pash,cur);if(isexit(maze,cur,entry)){printf("找到一条出口\n");return;}point up = cur;up.row -= 1;_getpash(maze,up,entry);point right = cur;right.col += 1;_getpash(maze,up,entry);point down = cur;down.row += 1;_getpash(maze,up,entry);point left = cur;left.col -= 1;_getpash(maze,up,entry);}void getpath(maze *maze,point entry)
{if(maze == NULL){return;}_getpash(maze,entry,entry);
}
test函数void test_maze()
{maze maze;mazeinit(&maze);point entry = {0,1};getpath(&maze,entry);mazeprint(&maze);}
int main()
{test_maze();return 0;
}

数据结构之简单迷宫求解相关推荐

  1. 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)

    前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...

  2. c语言迷宫问题输出坐标,C语言数据结构之迷宫求解问题

    现在网上各种对于迷宫的求解,版本多的数不胜数.本人小白一枚,贴上自己对迷宫的求解这个小项目,自己写的.望能帮助一些同样有困难的人,毕竟我当时费解了好一会儿时间呢. 首先,先标明对于迷宫求解这个项目,首 ...

  3. 《数据结构实践》设计报告---迷宫求解

    <数据结构实践>设计报告-迷宫求解 因为学校要求答辩结课,给了很多题目都不太会,决定把感兴趣的都做一做,在这存档备用. 课程设计题目:迷宫求解 课程设计主要内容和要求: 一.设计目的: 1 ...

  4. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  5. 强化学习 求解迷宫问题_使用天真强化学习的迷宫求解器

    强化学习 求解迷宫问题 This is a short maze solver game I wrote from scratch in python (in under 260 lines) usi ...

  6. 迷宫求解 java_迷宫求解算法(java版)

    迷宫求解算法一直是算法学习的经典,实现自然也是多种多样,包括动态规划,递归等实现,这里我们使用穷举求解,加深对栈的理解和应用 定义Position类用于存储坐标点 起点坐标为(1,1),终点坐标为(8 ...

  7. 数据结构无向图简单路径

    数据结构无向图简单路径 一.课程设计目的和要求 目的:锻炼学生对软件界面设计并进行实现的实践能力. 要求:(1)完成课程设计所给的所有功能. (2)根据课程设计的特点设计出相应的画面. 二.课程设计环 ...

  8. 简单迷宫,字符化输出

    简单迷宫,字符化输出 效果图 #include <stdio.h> #include <stdlib.h> #define M 8 #define N 8 #define TR ...

  9. java使用链栈实现迷宫求解

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...

最新文章

  1. 强化学习(二)- 动态规划(Dynamic Programming)
  2. 软件破解工具整理收集
  3. Spring AOP中pointcut expression表达式解析
  4. CRC原理及其逆向分析方法
  5. kubernetes1.8.4 安装指南 (基于静态Pod方式安装)
  6. WPF地区选择控件(内附下载地址)
  7. 虚电路网络和数据报网络
  8. python是什么语言-python是一门什么样的语言?
  9. 杂七杂八(7): win7无法安装python3
  10. 机器人运动学与动力学
  11. Qt使用QChart制作多路虚拟示波器
  12. 达叔走了,别只发声感叹就完了
  13. mac mini php开发,mac mini主要用来干嘛
  14. css用网络图片做背景图片,css 网页背景图片 怎样用CSS实现大背景网页效果
  15. 51Nod1123 X^A Mod B 数论 中国剩余定理 原根 BSGS
  16. android仿空间短视频播放
  17. Vue动态控制表格列的显示隐藏
  18. 计算机素养作文,文明素养的作文优秀范文
  19. 计算机结构及CISC和RISC
  20. 正则表达式(匹配第一个花括号)

热门文章

  1. G7波澜不惊,非美反弹缺乏力度
  2. SpringCloud的五大核心组件李俊老师
  3. 修改项目启动输出日志格式
  4. matlab如何去除图像白边_matlab 图像保存时去除白边
  5. 如何在同一台服务器起多个pm2进程
  6. java中continue是什么意思?
  7. 一线网页游戏程序员日志 (十)
  8. 迅搜安装流程(基于官方文档)
  9. 人脸美妆之唇色检测算法研究
  10. 使用UltraISO制作Ubuntu16.04 U盘启动盘