zoukankan      html  css  js  c++  java
  • 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;
                    }
                }
            }
        }
    }
     
  • 相关阅读:
    一个列表如何根据另一个列表进行排序(数组的相对排序)
    汉诺塔问题
    python面向对象基础
    python爬虫
    软件开发目录规范
    python--->包
    编译python文件
    python文件的俩种用途
    python模块的搜索路径
    python 循环导入的问题
  • 原文地址:https://www.cnblogs.com/wysAC666/p/10604877.html
Copyright © 2011-2022 走看看