//递归难以理解啊!
#include <stdio.h>
#define FALSE 0
#define TRUE 1
//定义出口坐标(m,n)
int m=6,n=8;
/*
x
x
x
x
x
x
x
x
x
x
yyyyyyyyyyyyyyyyyyyyyyyyyyy
*/
// 0表示有路,1表示墙
// 8行10列
int maze[8][10]={
1,1,1,1,1,1,1,1,1,1,
1,0,0,1,1,0,1,0,1,1,
1,1,0,0,1,1,0,0,0,1,
1,0,0,0,0,0,0,1,1,1,
1,1,1,0,1,1,0,0,0,1,
1,0,0,0,0,0,1,0,1,1,
1,1,0,1,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1
};
//用于记录我们有没有走过
int mark[8][10]={
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
};
// 这是用于计算 上,下,左,右运动后坐标的
int move[4][2]={
0,1,
1,0,
0,-1,
-1,0
};
//我们要从迷宫的(x,y)走到(m,n)
int SeekPath(int x, int y)
{
int i,g,h;//下一个坐标(g,h)
if((x==m) && (y==n))//走到出口了^_^
return TRUE;
/*
i=0,向右
i=1,向下
i=2,向左
i=3,向上
*/
for(i=0;i<4;i++)
{
g=x+move[i][0];
h=y+move[i][1];
if((maze[g][h]==0) && (mark[g][h]==0))
{//嘿,这个方向不是墙诶。坐个记号,继续走!!
mark[g][h]=1;
if(SeekPath(g,h))
{
printf("(%d,%d)<--",g,h);
return TRUE;
}
}
}
//上,下,左,右都走遍了,又回原点了
if((x==1) && (y==1))
printf("no path/n");
return FALSE;
}
main()
{
if(SeekPath(1,1))
printf("/n上面就是路径了/n");
}
迷宫
最新推荐文章于 2009-04-16 23:25:00 发布