今天小伙伴和我说之前写的那个迷宫问题有些问题,我就改了改,感觉之前写的东西思路也不清晰,也比较乱,就重新写了一篇……别在意哈~
一、迷宫问题描述:
给定一个迷宫,以及起点和终点,通过设计算法,找到一条可以到达终点的路径。解决以后,想办法找到最短路径和所有路径。
二、解决方法:
1、找到一条可达的路径并不难,只要设定方向,然后每个点都去找一个可以走的方向一直向可行方向走就是了。
2、找到最短路径。要找到最短路径,可以尝试广度优先算法——BFS。BFS找图中一点到另一点的最短路径还是很方便的(没有权值),主要思想是,把每一个点可到的状态都算出来,最先到达终点的状态就是最短的路径长度。就这样说可能很抽象,不妨看看下面这张图:
3、找所有路径。找所有路径比较简单的方法是先找出一条路径,然后回溯到上一个点,看看有没有别的地方可以走,再从这个方向往下走。从而不断回溯找到所有路径
三、代码:
找到所有路径的实现方式:
#include <stdio.h>
#include <stdlib.h>
#define WALL 1
#define ROAD 0
#define END -1
#define TRUE 1
#define FALSE 0
#define VISITED 1
#define UNVISITED 0
#define BARRIER -1 //四周都是墙的死路
#define MAXSIZE 11 //迷宫每行或每列中点的的最大数量
#define DIR_SIZE 4 //方向
#define STACK_SIZE 128
typedef int Status;
//迷宫中的点
typedef struct Point{
int x;