默、

默、是最乖的孩子 追随大神的脚步,兮兮

地图

阿福的地图
Time Limit(Common/Java):1000MS/3000MS          Memory Limit:65536KByte

Description

阿福是ACM老队员,阿福并非本名,大一的时候喜欢在网吧打真三,号称元培第一飞,后来入了ACM,连续二次获得省奖。现已大四的他,看着自己的同学在外实习,实习工资都有3k+,他也心动,所以去面试了多家公司,凭着在ACM的出生入死经历,面试都是小case,其中一家公司老总说:“我们公司所有人都有昵称,这样大家交流没有距离感,所以你来公司后叫阿福吧。”并随手给了一张公司地图给阿福。第二天阿福手拿地图去公司上班,他要经过一段路才能到达所在工作的软件开发部,他想在最快时间内到达,这样能给领导留下一个好印象,acm的师弟师妹你们帮帮阿福吧,算一下需要几分钟能到达。   地图有许多标记含义如下:'P':  阿福在公司门口位置'C':  公司的水泥路,走过要耗费时间1分钟'G':  公司的草坪,为了赶时间,阿福不拘小节。但是今年的这个时候是一星期七天雨,草地不好走,走一个单位需要耗费2分钟'D':  公司的狼狗,专门看守公司的,狗的视线在上下左右一个单位内,如果被发现,阿福就需要在那呆着了,否则狗会扑上来咬人了。'M':  公司的保安,因为公司比较大又有钱,小偷什么的很喜欢来光顾。因为每个保安有自己的负责区域,所以保安不会移动,阿福可以通过保安所在地,但是由于是新人,经过时需要检查身份以及走路时间等,最后在该单位需要3分钟时间。'#':  障碍,比如墙啊,禁区(有很多机密的地方)。。。,这些地方阿福当然不能经过了。'S':  公司所在的软件开发部。

Input

输入多组数据(组数在100以内),每组数据的首行是n,m代表公司大小(0<n,m<=100)每组数据之间有空行后面跟n行m列的标记字符,字符间没有空格

Output

对于每组测试数据,输出一行最快到达软件开发部的时间(分钟),如果不能到达,则输出"Sorry"。

Sample Input

3 3CCPCDCSCC3 3CDPCCCSGG 5 5CCMCPCCC#MCCCCCCDCG#CSCCC

Sample Output

SorrySorry9

Source

caisz

#include<iostream>
#include<queue>
using namespace std;

int n,m;
char map[101][101];
int f[4][2]={1,0,0,1,-1,0,0,-1};

struct Node
{
    int x,y,step;
    bool operator<(const Node &a) const
    {
        return step>a.step;
    }
};

int bfs(int pi,int pj)
{
    priority_queue<Node> q;
    Node now,next;
    now.x=pi;
    now.y=pj;
    now.step=0;
    q.push(now);
    while(!q.empty())
    {
        now=q.top();
        q.pop();
        for(int i=0;i<4;i++)
        {
            next.x=now.x+f[i][0];
            next.y=now.y+f[i][1];
            if(next.x<0||next.y<0||next.x>=n||next.y>=m||map[next.x][next.y]=='#') continue;
            if(map[next.x][next.y]=='S')
            {
                return now.step;
            }
            if(map[next.x-1][next.y]=='D'||map[next.x+1][next.y]=='D'||map[next.x][next.y-1]=='D'||map[next.x][next.y+1]=='D') continue;
            if(map[next.x][next.y]=='C')
            {
                next.step=now.step+1;
                q.push(next);
                map[next.x][next.y]='#';
            }
            else if(map[next.x][next.y]=='G')
            {
                next.step=now.step+2;
                q.push(next);
                map[next.x][next.y]='#';
            }
            else
            {
                next.step=now.step+3;
                q.push(next);
                map[next.x][next.y]='#';
            }
        }
    }
    return -1;
}

int main()
{
    int pi,pj;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%s",map[i]);
            for(int j=0;j<m;j++)
            {
                if(map[i][j]=='P')
                {
                    pi=i;
                    pj=j;
                }
            }
        }
        if(map[pi-1][pj]=='D'||map[pi+1][pj]=='D'||map[pi][pj-1]=='D'||map[pi][pj+1]=='D')
        {
            printf("Sorry\n");
            continue;
        }
        int Min=bfs(pi,pj);
        if(Min==-1)
        {
            printf("Sorry\n");
        }
        else
        {
            printf("%d\n",Min);
        }
    }
    return 0;
}


阅读更多
个人分类: 搜索
上一篇最短路径 (yp)
下一篇整除的特征
想对作者说点什么? 我来说一句

几种中国地图(flash)

2009年04月21日 142KB 下载

地图地图地图

2008年04月19日 142KB 下载

DOTA6.61地图

2010年02月20日 3.73MB 下载

东莞地图东莞地图东莞地图

2009年02月27日 607KB 下载

销售地图 代码

2018年05月17日 97KB 下载

LBS地图源码

2011年09月13日 45KB 下载

mapinfo地图(JPG)

2009年04月25日 791KB 下载

没有更多推荐了,返回首页

关闭
关闭