设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。
(1)建立迷宫对应的图数据结构,并建立其邻接表表示。
(2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。
将迷宫中的每一格作为一个顶点,相邻格子可以到达,则对应的顶点之间存在边相连。 例如下面的迷宫。
在使用数组表示时,用0表示格子是空地,用1表示格子处是墙,对应的矩阵是:
int mg[M+2][N+2]= //迷宫数组
{
{1,1,1,1,1,1},
{1,0,0,0,1,1},
{1,0,1,0,0,1},
{1,0,0,0,1,1},
{1,1,0,0,0,1},
{1,1,1,1,1,1}
};
建立的图结构为:
从(1,1)到(4,4)的迷宫问题,转化为寻找顶点(1,1)到顶点(4,4)的路径的问题。
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
#define M 4
#define N 4
//以下定义邻接表类型
typedef struct ANode //边的结点结构类型
{
int i,j; //该边的终点位置(i,j)
struct ANode *nextarc; //指向下一条边的指针
} ArcNod