问题:
以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
基本要求
输入的形式和范围:
非递归:行列为整型,坐标为整型
递归:迷宫以整型二维数组形式输入
输出的形式:非递归输出三元组通路和方阵通路;
递归以方阵输出迷宫和所有通路;
1、非递归算法,求一条通路输出三元组形式如:(1,1,1),(1,2,2)数据结构走迷宫游戏,(2,2,2),(3数据结构走迷宫游戏,2,3),(3,1数据结构走迷宫游戏 C语言数据结构实现:迷宫问题的通用解法!,2),…和方阵通路;
2、递归算法,求得迷宫中所有可能的通路,以方阵形式输出迷宫及其通路。
递归解法:
<pre>#include
include
define M 6
define N 6
define END N-2
int flag=0;
typedef struct
{
int x,y,d;
}position;
/创建迷宫/
void creat_maze(int a[][M])
{
int i,j;
for(i=0;ielem=e;
P->next=S;
S=P;
return S;
}
PLStack Delete(PLStack S) //删除栈头
{
PLStack P;
P=S;
if(!StackEmpty(S))
{
S=S->next;
free(P);
return S;
}
}
TriMatrix Pop(PLStack S,TriMatrix e) //出栈
{
if(!StackEmpty(S))
{
e=S->elem;
return e;
}
}
void MazePath(mark start,mark end,
Elemtype maze[MAXSIZE][MAXSIZE],
int m,int n,int diradd[4][2]) //寻找路径
{
int i,j,d;
int a,b;
TriMatrix elem,e;
PLStack S1,S2;
S1=InitStack(S1);
S2=InitStack(S2);
maze[start.x][start.y]=2; //修改入口坐标,做标记
elem.x=start.x;
elem.y=start.y;
elem.d=0; //开始为0
S1=Push(S1,elem);
while(!StackEmpty(S1)) //栈不空,有路可走
{
elem=Pop(S1,elem);
<p>
S1=Delete(S1);
i=elem.x;
j=elem.y;
d=elem.d+1;
while(d