栈和递归的应用,迷宫算法
- 格式:docx
- 大小:12.74 KB
- 文档页数:2
#include
#define M 6
#define N 8
move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//方向坐标值
maze[M+2][N+2]={{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}};
mark[M+2][N+2]={{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 PeekPath(int x, int y)
{
int i;//行走方向
int row, col;//下一步的行坐标值、列坐标值
if(x==M && y==N)//到达终点则返回1 结束
return(1);
for(i=0; i<4; i++)
{
row = x+move[i][0];
col = y+move[i][1];
if(maze[row][col]==0 && mark[row][col]==0)//所在位置可走且未标记则标记该位置并判断是否通向终点路径
{
mark[row][col] = 1;
if(PeekPath(row, col)==1)//路径通向终点则打印路径坐标
{
printf("(%d, %d)", row, col);
return(1);
}
}
}
return(0);
}
void main()
{
int i, j;
printf("迷宫图:\n"); for(i=0; i { for(j=0; j { if(maze[i][j]==1) printf("%d ", 1); else printf(" "); } printf("\n"); } printf("\n"); mark[1][1] = 1; printf("迷宫图解法:\n"); if(PeekPath(1, 1)==1) printf("(1, 1)\n"); printf("\n"); printf("计算机走向痕迹:\n"); for(i=0; i { for(j=0; j { if(mark[i][j]==0) printf("%d ", 0); else printf(" "); } printf("\n"); } }