博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 1649
阅读量:5031 次
发布时间:2019-06-12

本文共 1302 字,大约阅读时间需要 4 分钟。

这题要用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

你可能感兴趣的文章
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>