• 迷宫算法


    BFS广度优先搜寻迷宫最短路径。

    /*
    Sample Input:
    0 1 0 0 0
    0 1 0 1 0
    0 0 0 0 0
    0 1 1 1 0
    0 0 0 1 0
    
    Sample Output:
    (0, 0)
    (1, 0)
    (2, 0)
    (2, 1)
    (2, 2)
    (2, 3)
    (2, 4)
    (3, 4)
    (4, 4)
    */
    
    
    
    #include <stdio.h>
    #include <string.h>
    #define MAX 5
    int maze[MAX][MAX];
    int q[MAX*MAX];
    int fa[MAX][MAX];
    
    void BFS(int x,int y){
        int vsit[MAX][MAX];
        int front=0,rear=0,u;//队列头尾
        int dist[MAX][MAX];//父亲,距离数组
        int dx[4],dy[4];
        dx[0]=-1;dy[0]=0;
        dx[1]=1; dy[1]=0;
        dx[2]=0 ;dy[2]=-1;
        dx[3]=0 ;dy[3]=1;
        for(int i=0;i<MAX;i++)
            for(int j=0;j<MAX;j++)
                vsit[i][j]=0;
        u=x*MAX+y;
        fa[x][y]=u;
        dist[x][y]=0;
        q[rear++]=u;
        vsit[x][y]=1;//表示已被访问过
        while(front<rear){
            u=q[front++];
            x=u/MAX;
            y=u%MAX;
            for(int d=0;d<4;d++){
                int nx=x+dx[d];
                int ny=y+dy[d];
                if(nx>=0&&ny>=0&&nx<MAX&&ny<MAX&&!maze[nx][ny]&&!vsit[nx][ny]){
                    int v=nx*MAX+ny;
                    q[rear++]=v;
                    dist[nx][ny]=dist[x][y];
                    vsit[nx][ny]=1;
                    fa[nx][ny]=u;
                }
            }
        }
    }
    
    void Print_path(int x,int y){
        int a=fa[x][y]/MAX;
        int b=fa[x][y]%MAX;
        if(a!=x||b!=y)
            Print_path(a,b);
        printf("(%d, %d)
    ",x,y);
    }
    
    
    
        
    int main(){
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                scanf("%d",maze[i]+j);
        BFS(0,0);
        Print_path(MAX-1,MAX-1);
        return 0;
    }
    View Code
  • 相关阅读:
    ubuntu配置bonding 武汉
    桌面图标加载与存储
    launcher 图标删除分析
    Inflater
    Android屏幕元素层次结构
    简述Android触摸屏手势识别
    RelativeLayout && inflate
    manifest分析
    vacantcell缓存分析
    桌面快捷键和桌面livefolder
  • 原文地址:https://www.cnblogs.com/JT-L/p/3657699.html
Copyright © 2020-2023  润新知