我是靠谱客的博主 落后萝莉,最近开发中收集的这篇文章主要介绍ZOJ 1649,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这题要用BFS去做,要注意的是’x‘,这里可以有优先队列去做,会很简单;

另一个要注意的是,a只有一个,r可能有很多个,所以可以用a去找最接近的r;

 

 

 

#include <iostream>
#include <queue>
#include "string.h"
using namespace std;
struct step{
    int x,y,t;
    void init(int xx,int yy,int tt){
        x=xx;
        y=yy;
        t=tt;
    }
};
int n,m,sx,sy;
bool visited[200][200];
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
char road[200][200];
bool operator<(step a, step b)
{
    return a.t > b.t;
}
int bfs(){
    memset(visited, 0 , sizeof(visited));
    priority_queue<step> q;
    step start;
    start.init(sx,sy,0);
    q.push(start);
    visited[sy][sx]=1;
    while(!q.empty()){
        step k=q.top();
        q.pop();
        int x=k.x,y=k.y,t=k.t;
        for(int i=0;i<4;i++){
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(nx<0||nx>m||ny<0||ny>n||visited[ny][nx])continue;
            if(road[ny][nx]!='r'&&road[ny][nx]!='x'&&road[ny][nx]!='.'){continue;}
            if(road[ny][nx]=='r'){return t+1;}
            if(road[ny][nx]=='x'){
                step s;
                s.init(nx,ny,t+2);
                q.push(s);
                visited[ny][nx]=true;
                continue;
            }
            step s;
            s.init(nx,ny,t+1);
            q.push(s);
            visited[ny][nx]=true;
        }
    }

    return -1;
}
int main(){
    while(cin>>n>>m){
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin>>road[i][j];
                if(road[i][j]=='a'){
                    sx=j;
                    sy=i;

                }
            }
        }

        int time=bfs();
        if(time==-1)cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
        else cout<<time<<endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/Mr-Xu-JH/p/3851152.html

最后

以上就是落后萝莉为你收集整理的ZOJ 1649的全部内容,希望文章能够帮你解决ZOJ 1649所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部