给出一个矩阵迷宫,0表示可以走,1表示墙不可以走,(0,0)为迷宫入口标记为,出口为任意边际坐标,寻找一条通路,
思路:
采用深度优先算法DFS,遍历迷宫,把不可走的路标记为1,可以走的路标记为2
代码:
#include<stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 10
void display(int matrix[][N])
{
usleep(300000);
printf("\033[2J");//清屏
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(matrix[i][j]==2)
printf("\033[33m%d\033[0m \t",matrix[i][j]); //033[37m 设置前景色 ,既字体颜色
else
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
}
void dfs(int matrix[][N],int in_x,int in_y,int out_x,int out_y)
{
if(in_x==out_x && in_y==out_y)
{
display(matrix);
exit(0);
}
if(in_x+1<N &&matrix[in_x+1][in_y]==0) //往下走
{
matrix[in_x+1][in_y]=2;//标记这条路可以走
display(matrix);
dfs(matrix,in_x+1,in_y,out_x,out_y);
matrix[in_x+1][in_y]=1; //标记这条路走不通
}
if(in_y+1<N &&matrix[in_x][in_y+1]==0)//往右走
{
matrix[in_x][in_y+1]=2;
display(matrix);
dfs(matrix,in_x,in_y+1,out_x,out_y);
matrix[in_x][in_y+1]=1; //标记这条路走不通
}
if(in_y-1>=0 &&matrix[in_x][in_y-1]==0)//往左走
{
matrix[in_x][in_y-1]=2;
display(matrix);
dfs(matrix,in_x,in_y-1,out_x,out_y);
matrix[in_x][in_y-1]=1; //标记这条路走不通
}
if(in_x-1>=0 &&matrix[in_x-1][in_y]==0)//往上走
{
matrix[in_x-1][in_y]=2;
display(matrix);
dfs(matrix,in_x-1,in_y,out_x,out_y);
matrix[in_x-1][in_y]=1; //标记这条路走不通
}
}
int main(void)
{
int matrix[N][N]={ 2,0,0,0,1,0,0,0,1,0,
0,0,0,0,1,0,1,0,1,0,
0,0,1,0,1,0,1,0,0,0,
0,0,1,0,0,0,1,1,1,0,
0,1,1,1,1,1,1,0,0,0,
0,0,0,0,1,0,1,0,0,0,
0,0,0,0,1,0,1,0,0,0,
0,0,0,0,1,0,1,0,0,0,
0,0,0,0,1,0,1,0,0,0,
0,0,0,0,0,0,1,0,0,0};
display(matrix);
dfs(matrix,0,0,9,7);
return 0;
}
结果: