C语言-走迷宫

给出一个矩阵迷宫,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;
}

 

结果:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值