E--IGNB HDU - 1242

题目链接:https://vjudge.net/problem/HDU-1242

题目链接:https://vjudge.net/problem/21153/origin

题目

Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison.

Angel's friends want to save Angel. Their task is: approach Angel. We assume that "approach Angel" is to get to the position where Angel stays. When there's a guard in the grid, we must kill him (or her?) to move into the grid. We assume that we moving up, down, right, left takes us 1 unit time, and killing a guard takes 1 unit time, too. And we are strong enough to kill all the guards.

You have to calculate the minimal time to approach Angel. (We can move only UP, DOWN, LEFT and RIGHT, to the neighbor grid within bound, of course.)

Input

First line contains two integers stand for N and M.

Then N lines follows, every line has M characters. "." stands for road, "a" stands for Angel, and "r" stands for each of Angel's friend.

Process to the end of the file.

Output

For each test case, your program should output a single integer, standing for the minimal time needed. If such a number does no exist, you should output a line containing "Poor ANGEL has to stay in the prison all his life."

Sample Input

7 8
#.#####.
#.a#..r.
#..#x...
..#..#.#
#...##..
.#......
........

Sample Output

13

题目大意:给你一个地图,a表示天使的位置,#表示墙,. 表示可以走的路,r表示天使的朋友,x表示守卫,

问你他的朋友要去救天使(就是到达天使的地方)。对于守卫,我们可以花费一秒钟打死他,也可以饶过他。

让你求朋友救出天使的最短时间。

思路:

我们可以从天使位置开始bfs,用优先队列,因为守卫的存在,会导致你bfs到各个边界的值时间不同步,所以要用优先队列,让时间花费少的排在前面,。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
using namespace std;
char mp[205][205];
int vis[205][205];
int xa,ya;
int mv[4][2]= {0,1,1,0,0,-1,-1,0};
struct zxc
{
    int x,y,step;

} st,en;
struct cmp{
	bool operator ()(const zxc &a,const zxc &b)
	{
		if(a.step > b.step)
		{
			return true;
		}
		return false;
	}
};

priority_queue<zxc,vector<zxc>,cmp> q;

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        memset(vis,0,sizeof(vis));
        for(int i=0; i<n; i++)
        {
            scanf("%s",mp[i]);
            for(int j=0; j<m; j++)
            {
                if(mp[i][j]=='a')
                {
                    xa=i;
                    ya=j;
                }
            }
        }
        st.x=xa,st.y=ya;
        vis[xa][ya]=1;
        st.step=0;
        q.push(st);
        int flog=0;
        while(!q.empty())
        {
            st=q.top();
            q.pop();
            if(mp[st.x][st.y]=='r')
            {
                flog=1;
                printf("%d\n",st.step);
                break;
            }
            for(int i=0; i<4; i++)
            {
                en.x=st.x+mv[i][0];
                en.y=st.y+mv[i][1];
                if(en.x<0||en.x>=n||en.y<0||en.y>=m||vis[en.x][en.y]==1||mp[en.x][en.y]=='#')
                {
                    continue;
                }
                else
                {
                    if(mp[en.x][en.y]=='x')
                    {
                        en.step=st.step+2;
                    }
                    else
                    {
                        en.step=st.step+1;

                    }
                    vis[en.x][en.y]=1;
                    q.push(en);

                }
            }

        }
        if(!flog)
        {
            printf("Poor ANGEL has to stay in the prison all his life.\n");
        }
    }

    return 0;
}

 

全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务