• BFS迷宫最短路径模板


    #include<iostream>
    #include<queue>
    #define INF 65535
    using namespace std;
    int vis[100][100]; //路径长度 
    int map[100][100]; //迷宫地图 
    typedef pair<int,int> P; //节点坐标 
    P p;
    int dx[4] = {1,0,-1,0};  //四个方向 
    int dy[4] = {0,1,0,-1};
    int sx = 0,sy = 0; //起始坐标 
    int ex = 4,ey = 4; //出口坐标 
    int N,M;  //迷宫大小 
    void BFS(); //搜素 
    int main()
    {
        int n;
        //scanf("%d %d",&N,&M);
        N = 5;
        M = 5;
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
                scanf("%d",&map[i][j]);
            }
        }
        BFS(); 
        printf("%d",vis[N-1][M-1]); 
        return 0;
    }
    void BFS(){
        queue<P> que;
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
                vis[i][j] = INF;  //初始化所有路径都没有访问过 
            }
        }
        vis[sx][sy] = 1; //表示起始路径长度 
        que.push(P(sx,sy));
        while(que.size()){
            p = que.front();
            que.pop();
            for(int i=0;i<4;i++){
                int x = p.first + dx[i];
                int y = p.second + dy[i];
                if(x>=0&&x<N&&y>=0&&y<M&&map[x][y]!=1&&vis[x][y]==INF){ //表示坐标在范围内并且没有访问过而且路径是通的就走 
                    que.push(P(x,y));
                    //printf("(%d,%d)
    ",x,y);
                    vis[x][y] = vis[p.first][p.second] + 1; 
                    if(p.first==ex&&p.second==ey){
                        break;
                    }
                }
            }
        }
    }
     
  • 相关阅读:
    Using F2 to Rename Open Files
    Java 浅析 Thread.join()
    JDK 8
    Automata
    The Hungarian Abhorrence Principle
    Spring 与 MyBatis 的整合
    JDK 8
    面向对象设计原则汇总
    Java Error : type parameters of <T>T cannot be determined during Maven Install
    【源码拾遗】从vue-router看前端路由的两种实现
  • 原文地址:https://www.cnblogs.com/wysAC666/p/10604877.html
Copyright © 2020-2023  润新知