码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1242

时间:2016-01-17 21:34:23      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

题意:有一个人被困在监狱了,他的朋友想去救他,x代表守卫,a代表这个人,r代表他的朋友,#代表墙,问朋友找他最小的时间,移动一格时间+1,如果那地方是守卫,杀死守卫也需要+1时间;

思路:和HDU 1240差不多,记忆最短路径。

但这题有个坑点,就是他的朋友可能有多个,我读题的时候没看到... 直接超时4发

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
using namespace std;
const int qq=200+5,no=1e7;
char map[qq][qq];
int dis[qq][qq],n,m,minx;
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
void dfs(int x,int y,int cnt)
{
    if(x<0||y<0||x>=n||y>=m)    return;
    if(map[x][y]==#)    return;
    if(cnt>=dis[x][y])    return;
    else    dis[x][y]=cnt;    
    if(cnt>=minx)    return;
    if(map[x][y]==r)    if(cnt<minx)    minx=cnt;
    if(map[x][y]==x)    ++cnt;
    for(int i=0;i<4;++i)
        dfs(x+dx[i],y+dy[i],cnt+1);
    return;
}
int main()
{
    while(cin >> n >> m){
        int sx,sy;
        for(int j,i=0;i<n;++i)
            for(j=0;j<m;++j){
                cin >> map[i][j];
                if(map[i][j]==a){
                    sx=i;sy=j;
                }
                dis[i][j]=no;
            }
    minx=INT_MAX;
    dfs(sx,sy,0);
    if(minx!=INT_MAX)    cout << minx << endl;
    else    cout << "Poor ANGEL has to stay in the prison all his life."  << endl;
    }
}

 

%*c代表跳过这个变量;

HDU 1242

标签:

原文地址:http://www.cnblogs.com/sasuke-/p/5137840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!