EOJ 1224 bfs

Posted taming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EOJ 1224 bfs相关的知识,希望对你有一定的参考价值。

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

typedef pair<int,int> pii;
const int maxN=220;
const int inf=1e9;

char G[maxN][maxN];

int M,N;
int cnt[maxN][maxN];

const int tx[]={-1,0,1,0},ty[]={0,1,0,-1};

int bfs(pii s){
    for(int i=0;i<maxN;i++){
        for(int j=0;j<maxN;j++)cnt[i][j]=inf;
    }
    cnt[s.first][s.second]=0;
    queue<pii> q;
    pii p;
    int a,b,res=inf;
    q.push(s);
    while(!q.empty()){
        p=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            a=p.first+tx[i];
            b=p.second+ty[i];
            if(a>=0&&a<N&&b>=0&&b<M&&G[a][b]!=#){
                if(G[a][b]==X&&cnt[p.first][p.second]+2<cnt[a][b]){
                    cnt[a][b]=cnt[p.first][p.second]+2;
                    q.push(pii(a,b));
                }else if(G[a][b]!=X&&cnt[p.first][p.second]+1<cnt[a][b]){
                    cnt[a][b]=cnt[p.first][p.second]+1;
                    if(G[a][b]!=T)q.push(pii(a,b));
                    else res=min(res,cnt[a][b]);
                }
            }
        }
    }
    return res;
}

int main(){
    while(~scanf("%d%d",&N,&M)){
        memset(G,0,sizeof(G));
        for(int i=0;i<N;i++)scanf("%s",G[i]);
        pii s;
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++)if(G[i][j]==S){
                s=pii(i,j);
                goto here;
            }
        }
        here:
        int res=bfs(s);
        if(res<inf)printf("%d
",res);
        else printf("impossible
");
    }
}

 

以上是关于EOJ 1224 bfs的主要内容,如果未能解决你的问题,请参考以下文章

EOJ 3261 分词

EOJ3536 蛇形矩阵---找规律

EOJ_3653. 她的名字 预处理 组合数

EOJ Monthly 2018.2 (Good bye 2017)

db2 错误 sqlcode:-1224

拼音魔法-华东师范大学程序设计竞赛-3256-EOJ