Find a way HDU - 2612

原创 2018年04月17日 21:00:28

原oj网址点击打开链接

vj网址点击打开链接

这道题 水题 但是在一开始比赛的时候不知道为啥 总是 样例错 当时是 各种怀疑人生啊 ~~~ 最后才发现 是一个字母写错了  队友已经磨刀差点砍我了  这道题的意思就是  有两个人 在图上显示 y m 然后 @是 kfc 他们两个是 想到距离最短的kfc去聊聊天 什么的 然后问你 需要的最短时间 (每走一步是11min) 然后 这道题 直接 两遍bfs 就过的轻轻松松 直接 把 到的时间 存在数组里 就行  然后这道题 就过去了 

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
using namespace std;
char p[300][300];
struct ppx
{
    int x, y, z;
} as, ad, af, ag;
int k[5] = { -1, 0, 0, 1};
int kk[5] = {0, 1, -1, 0};
int ass[300][300];
int add[300][300];
bool bj[300][300];
int n, m, maxx;
void bfs()
{
    memset(bj, 0, sizeof(bj));
    queue<ppx>q;
    bj[as.x][as.y]=1;
    q.push(as);
    while(!q.empty())
    {
        af = q.front();
        q.pop();
        //printf("%d %d\n",af.x,af.y);
        if(p[af.x][af.y] == '@')
        {
          //  printf("%c\n",p[af.x][af.y]);
    //  printf("%d %d    0 \n",af.x,af.y);
            ass[af.x][af.y] = af.z;
        }
        for(int i = 0; i < 4; i++)
        {
            ag = af;
            ag.x = af.x + k[i];
            ag.y = af.y + kk[i];
            if(ag.x >= 0 && ag.x < n && ag.y >= 0 && ag.y < m && p[ag.x][ag.y] != '#' && !bj[ag.x][ag.y])
            {
                bj[ag.x][ag.y] = 1;
                ag.z = af.z + 1;
                q.push(ag);
            }
        }
    }
    memset(bj, 0, sizeof(bj));
    bj[ad.x][ad.y]=1;
    queue<ppx>qq;
    qq.push(ad);
    while(!qq.empty())
    {
        af = qq.front();
        qq.pop();
        if(p[af.x][af.y] == '@')
        {
            add[af.x][af.y] = af.z;
        }
        for(int i = 0; i < 4; i++)
        {
            ag = af;
            ag.x = af.x + k[i];
            ag.y = af.y + kk[i];
            if(ag.x >= 0 && ag.x < n && ag.y >= 0 && ag.y < m && p[ag.x][ag.y] != '#' && ! bj[ag.x][ag.y])
            {
                bj[ag.x][ag.y] = 1;
                ag.z = af.z + 1;
                qq.push(ag);
            }
        }
    }
}
int main()
{
    while(~scanf("%d%d", &n, &m))
    {
         maxx =1000000+1 ;
        memset(bj, 0, sizeof(bj));
        for(int i = 0; i < n; i++)
        {
            scanf("%s", p+i);
            for(int j = 0; j < m; j++)
            {
                 ass[i][j]=1000000;
                 add[i][j]=1000000;
                if(p[i][j] == 'Y')
                {
                    as.x = i, as.y = j, as.z = 0;
                }
                if(p[i][j] == 'M')
                {
                    ad.x = i, ad.y = j, ad.z = 0;
                }
            }
        }
        bfs();
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                if(ass[i][j] == 1000000|| add[i][j] == 1000000)
                    continue;
                maxx = min(maxx, ass[i][j] + add[i][j]);
            }
        }
        printf("%d\n", maxx*11);
    }
    return 0;
}

HDU-2612-Find a way

//这题坑了我一晚上,用C++交不行,结果用C或者G++却过来,哎。。。。这题让我明白,如果用BFS,要保存到达“@”点的步数,bfs一直搜索,直到没发走才停。让后在主函数中进行输出比较。。。 AC代...
  • zyx520ytt
  • zyx520ytt
  • 2015-07-23 20:54:14
  • 305

HDU 2612 find a way

跑两遍BFS,开数组记录到达KFC步数。
  • sky_miange
  • sky_miange
  • 2015-02-06 11:05:16
  • 1020

HDU:2612 Find a way(双BFS+打表)

Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot...
  • zugofn
  • zugofn
  • 2016-07-30 00:48:15
  • 601

杭电 HDU ACM 2612 Find a way (简单两路广搜)

欢迎参加——每周六晚的BestCoder(有米!) Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/...
  • lsgqjh
  • lsgqjh
  • 2015-07-31 09:47:27
  • 1713

hdoj 2612 Find a way简单广搜

刚开始看到这道题居然想的是用肯德基店作为广搜的首节点, 然后TLE 后来想想要是好多家肯德基那么每一家就广搜一次,不超时就怪了 然后才发现用Y和M两遍广搜标记好距离就可以了,然后看每一家肯德基店二...
  • waterkokoro
  • waterkokoro
  • 2015-07-23 15:28:21
  • 335

杭电2612 Find a way(BFS)

Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total...
  • u013634213
  • u013634213
  • 2014-12-29 18:22:43
  • 434

BFS基础题 杭电2612 Find a way 1252 Hike on a Graph

BFS与DFS简单对比DFS适合将所有的全都遍历一遍,就像之前的博客中的两道DFS基础题,比如最多可以走几步,所有的连通区域个数,这些都需要全部遍历完才能知道。而BFS,比如求最短的距离,可以直接宽度...
  • IBelieve2016
  • IBelieve2016
  • 2017-07-04 09:53:09
  • 256

[ACM] hdu Find a way

Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total...
  • sr19930829
  • sr19930829
  • 2014-01-18 14:57:10
  • 2704

hdu 2612 find a way

点击打开链接 找到离两个人路程和的最小值。 可以广搜一遍,把有kfc的的路中最小值,找出来。 也可以两个bfs 求两个距离和最小。 坑爹的我之前吧距离和存一个数组,...
  • zoro_n
  • zoro_n
  • 2016-12-25 22:00:27
  • 102

HDU 2612 - Find a way

题目大意:Y和M要到同一家KCF碰面,每一步要走11分钟,’#‘为障碍物,’@‘为KCF。问两人到同一家KCF总时长最短要多久。 解题思路:与迷宫问题类似,只是要两个人走,将所有KCF位置读入结构体...
  • qq_38638213
  • qq_38638213
  • 2017-09-04 19:20:53
  • 50
收藏助手
不良信息举报
您举报文章:Find a way HDU - 2612
举报原因:
原因补充:

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