hdoj1242bfs入门

原创 2015年02月07日 18:39:09

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
int d[210][210];
using namespace std;
const int inf=0x7fffffff;
char field[210][210];
int n,m,sx,sy;
int fx[4]={0,0,-1,1};
int fy[4]={1,-1,0,0};
struct pos
{
    int x,y,step;
};
int bfs()
{
    queue<pos> que;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        d[i][j]=inf;
    d[sx][sy]=0;
    pos tmp,next;
    tmp.x=sx;
    tmp.y=sy;
    tmp.step=0;
    que.push(tmp);
    int minn=inf;
    while(!que.empty())
    {
        tmp=que.front();
        que.pop();
        if(field[tmp.x][tmp.y]=='r')
            minn=min(minn,d[tmp.x][tmp.y]);
        for(int i=0;i<4;i++)
        {
            int nx=tmp.x+fx[i];
            int ny=tmp.y+fy[i];
            if(nx>=0&&nx<n&&ny>=0&&ny<m&&field[nx][ny]!='#')
            {
                if(d[nx][ny]>tmp.step+1)
                {
                    next.x=nx;
                    next.y=ny;
                    next.step=tmp.step+1;
                    if(field[nx][ny]=='x')
                        next.step++;
                    que.push(next);
                    d[nx][ny]=next.step;
                }
            }
        }
    }
    return minn;
}
int main()
{
    while(cin>>n>>m)
    {
        memset(d,0,sizeof(d));
        for(int i=0;i<n;i++)
            scanf("%s",field[i]);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                if(field[i][j]=='a')
                {
                    sx=i;
                    sy=j;
                }
        int res=bfs();
        if(res==inf)
            printf("Poor ANGEL has to stay in the prison all his life.\n");
        else
            printf("%d\n",res);
    }
    return 0;
}

题目大意:一个n*m的监狱,a表示天使,r表示天使的朋友,x表示守卫,.表示路,#表示墙。天使的朋友要去救天使,碰到守卫会增加1s的用时。题意是说有多个朋友,但据说测试数据中都是只有一个朋友的情况。不过我还是按有多个朋友解决。就是从天使作为起点,朋友作为你终点,在所有终点中找最小的那个。



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java入门

一、Androind为什么选择Java 1、Java使用人数最多,更加吸引开发者开发 2、Java有开发工具,开发难度小 3、Java有内存管理,无指针 4、Java跑在虚拟机上,可限制APP开发OS...

Python版 HelloWorld

转载请注明出处:http://blog.csdn.net/wklken/archive/2011/04/09/6311292.aspx   好吧,从现在开始,脚踏实地地来吧。     一、p...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Team Queue

Team QueueDescriptionQueues and Priority Queues are data structures which are known to most computer...

Android概述

网络通信技术发展概述: 1994年  1G  模拟信号(模拟声音波频)  由此诞生大哥大,原理:相当于继承了收音机和广播电台,一边接受信号,一边发送信号  缺点:安全性低、硬件部分太大、通话声音...

【杭电oj2034】人见人爱A-B

人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

ListView控件入门

ListView控件是一个表格控件,该控件支持多行和多列。本文的主要内容是如何在C#窗体应用程序中添加并显示该控件。

csu 1530: Gold Rush

题意:金块的重量为2^n,Alice有容量为a的背包,Bob有容量为b的口袋,并且2^n=a+b,一次法术可将金块均分为两部分,问要至少多少次法术才能分成a+b 1.可能RE的情况: ACCE...

【杭电oj2043】密码

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...

the SetStack computer

The SetStack ComputerBackground from Wikipedia: “Set theory is a branch of mathematics created princ...

【杭电oj2023】求平均成绩

求平均成绩 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)