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

    因为这道题的根本性质上就是迷宫模板,所以具体讲解看我的 1215 迷宫 即可

    链接:https://www.cnblogs.com/qwn34/p/13732506.html

    上代码 BFS()

    #include<bits/stdc++.h>
    using namespace std;
    struct node{//结构体方便存放同一个点的横纵坐标及每走一步的步数 
        int x,y,step;
    }que[10010];
    int f,r;//队首队尾 
    char mp[105][105];//地图 
    int n,m,sx,sy,edx,edy;//地图行列,起始位置,终点 
    int fx[4][2]={{1,0},{-1,0},{0,-1},{0,1}};//方位 
    
    void pr(){//测试函数 
        cout<<"-------"<<endl;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cout<<mp[i][j];
            }
            cout<<endl;
        }
    }
    
    void bfs(int x,int y){
        f=r=1;//队列初始化    
        que[r].x=x , que[r].y=y , que[r].step=0 ,mp[x][y]='#';//将起点信息插入队尾,并将其记录为已走 
        
        while(f<=r){
            node t;
            t.x=que[f].x , t.y=que[f].y , t.step=que[f].step;//获取队首信息 
            
            if(t.x==edx && t.y==edy){//达到条件时输出,并直接退出即可 
                cout<<t.step<<endl;
                break;
            }
            
            for(int i=0;i<4;i++){
                int nx=t.x+fx[i][0];//下一步的横坐标 
                int ny=t.y+fx[i][1];//下一步的纵坐标 
                
                if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]=='.'){//约束条件 
                    mp[nx][ny]='#';//将当前位置标记为已走过 
    //                pr();
                    r++;
                    que[r].x=nx;//插入队尾 
                    que[r].y=ny;
                    que[r].step=t.step+1;//并计数 
                }
            }
            f++;//队首出队 
        }
    }
    int main(){
        //输入 
        cin>>n>>m;
        for(int i=0;i<n;i++)
            cin>>mp[i];
    //    pr();
    
        //记录起点和终点,并将其转化为可走的'.' 
        for(int i=0;i<n;i++){ 
            for(int j=0;j<m;j++){
                if(mp[i][j]=='S'){
                    sx=i , sy=j;
                    mp[sx][sy]='.';
                }
                if(mp[i][j]=='T'){
                    edx=i , edy=j;
                    mp[edx][edy]='.';
                }
            }
        }
    //    cout<<sx<<" "<<sy<<endl;
    //    cout<<edx<<" "<<edy<<endl;
        bfs(sx,sy);
        return 0;
    } 

    感谢支持!!

  • 相关阅读:
    unigui+fastreport报表打印
    MySQL索引类型总结和使用技巧以及注意事项
    Vue.js 和 MVVM
    Go -- 中结构体与字节数组能相互转化
    iOS算法合集
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    JS注入
    JS页面间传值
    上手ReactiveCocoa之基础篇
    数据结构与算法题整理
  • 原文地址:https://www.cnblogs.com/qwn34/p/13772673.html
Copyright © 2011-2022 走看看