走迷宫

源代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 5
#define M 5

int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int maze[N][M];
int visit[N][M];//记录是否访问
int dist[N][M];//记录到当前位置的距离
int q[N*M];//模拟一个队列
int fa[N][M];//记录父节点的位置号
void bfs(int a,int b)
{
   int front=0;
   int rear=0;
   int u,v;
   u=a*M+b;
   visit[a][b]=1;
   dist[a][b]=0;
   fa[a][b]=u;
   q[rear++]=u;
   while(front<rear)
   {
       u=q[front++];
       a=u/M;
       b=u%M;
       for(v=0;v<4;v++)
       {
           int nx=a+dir[v][0];
           int ny=b+dir[v][1];
           if(nx>=0 && nx<=N && ny>=0 && ny<=M &&!maze[nx][ny] && !visit[nx][ny])
           {
               int v=nx*M+ny;
               q[rear++]=v;
               visit[nx][ny]=1;
               dist[nx][ny]=dist[a][b]+1;
               fa[nx][ny]=u;

           }
       }
   }
}
//打印出一条路径
void print_path(int x,int y)
{
    int fx=fa[x][y]/M;
    int fy=fa[x][y]%M;
    if(fx!=x || fy!=y)
    {
        print_path(fx,fy);
        printf("%d%d
",x,y);
    }
}

void main()
{
    int i,j;
    memset(visit,0,sizeof(visit));
    memset(dist,0,sizeof(dist));

    for(i=0;i<N;i++)
        for(j=0;j<M;j++)
            scanf("%d",&maze[i][j]);
    bfs(0,0);
    print_path(4,4);
}
选择了远方,便只顾风雨兼程
原文地址:https://www.cnblogs.com/ly-rabbit-wust/p/5575229.html