C++ 基礎題 BFS(資訊之芽)

題目連結:Sprout Online Judge No. 44

BFS 常見的題目

#include<bits/stdc++.h>
using namespace std;

const int dr[4]{1,0,-1,0},dc[4]{0,-1,0,1};
struct step{
    int r,c,ct;
};

int main(){
    ios::sync_with_stdio(0);cin.tie(0);

    int n;
    while(cin>>n && n!=0){
        vector<string> m;
        for(int i=0;i<n;i++){
            string l;
            cin>>l;
            m.push_back(l);
        }

        step start;
        for(int i=0;i<n;i++){
            for(int j=0;j<m[i].size();j++){
                if(m[i][j]=='K'){
                    m[i][j]='#';
                    start.r=i;
                    start.c=j;
                    start.ct=0;
                    break;
                }
            }
        }

        queue<step> bfs;
        bfs.push(start);
        bool isfind=false;
        int ans=1000000000;

        while(!bfs.empty()){
            step sNow=bfs.front();
            bfs.pop();
            for(int i=0;i<4;i++){
                step sNext={sNow.r+dr[i],sNow.c+dc[i],sNow.ct+1};
                if(m[sNext.r][sNext.c]=='.'){
                    m[sNext.r][sNext.c]='#';
                    bfs.push(sNext);
                }else if(m[sNext.r][sNext.c]=='@'){
                    isfind=true;
                    m[sNext.r][sNext.c]='#';
                    ans=min(sNext.ct,ans);
                }
            }
        }

        if(isfind){
            cout<<ans<<"\n";
        }else{
            cout<<"= =\n";
        }
    }
    return 0;
}

發佈留言