zoukankan      html  css  js  c++  java
  • 走迷宫

    源代码如下:

    #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);
    }
    选择了远方,便只顾风雨兼程
  • 相关阅读:
    Flume-NG源码分析-整体结构及配置载入分析
    Flume之核心架构深入解析
    使用maven构建scala项目
    大数据的一些面试题
    HBase原理和设计
    Hive UDAF开发详解
    Hive UDTF开发指南
    Hive UDF开发指南
    局域网访问电脑中VMware虚拟机
    百度面试-前端
  • 原文地址:https://www.cnblogs.com/ly-rabbit-wust/p/5575229.html
Copyright © 2011-2022 走看看