码迷,mamicode.com
首页 > 其他好文 > 详细

EOJ 1224 bfs

时间:2018-07-20 23:39:09      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:name   max   empty   oss   bit   push   clu   lse   type   

#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\n",res);
        else printf("impossible\n");
    }
}

 

EOJ 1224 bfs

标签:name   max   empty   oss   bit   push   clu   lse   type   

原文地址:https://www.cnblogs.com/TAMING/p/9344587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!