栈和递归的应用,迷宫算法

  • 格式: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");

}

}