HDU 2612 Find a way bfs 难度:1

http://acm.hdu.edu.cn/showproblem.php?pid=2612

bfs两次就可将两个人到达所有kfc的时间求出,取两人时间之和最短的即可,这个有点不符合实情,题目应该出两人最大时间最小才对

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int inf=0x3fffffff;
char maz[300][301];
int n,m;
int mdp[300][300],ydp[300][300];

queue<int> que;
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};
bool in(int x,int y){
        return x>=0&&x<n&&y>=0&&y<m;
}
void bfs(int sx,int sy,int dp[300][300]){
        dp[sx][sy]=0;
        que.push(sx*300+sy);
        while(!que.empty()){
                int x=que.front()/300,y=que.front()%300;que.pop();
                for(int i=0;i<4;i++){
                        int tx=x+dx[i],ty=y+dy[i];
                        if(in(tx,ty)&&maz[tx][ty]!=‘#‘&&dp[tx][ty]>dp[x][y]+1){
                                dp[tx][ty]=dp[x][y]+1;
                                que.push(tx*300+ty);
                        }
                }
        }
}

int main(){
        while(scanf("%d%d",&n,&m)==2){
                for(int i=0;i<n;i++){
                        scanf("%s",maz[i]);
                }
                for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                                mdp[i][j]=ydp[i][j]=inf;
                        }
                }
                for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                                if(maz[i][j]==‘M‘){
                                        bfs(i,j,mdp);
                                }
                                else if(maz[i][j]==‘Y‘){
                                        bfs(i,j,ydp);
                                }
                        }
                }
                int ans=inf;
                for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                                if(maz[i][j]==‘@‘){
                                        ans=min(ans,mdp[i][j]+ydp[i][j]);
                                }
                        }
                }
                printf("%d\n",ans*11);
        }
        return 0;
}

  

时间: 2024-10-22 10:31:13

HDU 2612 Find a way bfs 难度:1的相关文章

HDU 2612 Find a way (BFS)

Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6251    Accepted Submission(s): 2081 Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally.

BFS(最短路) HDU 2612 Find a way

题目传送门 1 /* 2 BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 3 */ 4 /************************************************ 5 Author :Running_Time 6 Created Time :2015-8-4 19:36:36 7 File Name :HDOJ_2612.cpp 8 ************************************************

Problem N HDU 2612 Find a way (两次BFS求最值)

N - Find a way Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2612 Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei hav

HDU 2612 -Find a way (注意细节的BFS)

题目链接:Find a Way 题目不难,前几天做,当时准备写双向BFS的,后来处理细节上出了点问题,赶上点事搁置了,今天晚上重写的,没用双向,用了两次BFS搜索,和双向BFS 道理差不多,只是这题有个小坑,需要注意 1.Y不能经过M,M不能经过Y,也就是说有Y和M的格子,可以默认为是墙 2.必须是Y和M都能到达的KFC才行,只是其中一个到达不行 例如下列数据:答案既不是22 也不是 88 而是110,左下角的KFC满座条件 5 5 Y..#@ ...M. ....# ..... @.... 小

HDU 1253 胜利大逃亡(BFS)

#include <iostream> #include <cstdlib> #include <cstdio> #include <queue> #include <cstring> using namespace std; struct node{ int x,y,z,step; }; int ma[51][51][51]; int A,B,C,T; int mv[6][3] = {{1,0,0},{0,1,0},{0,0,1},{-1,0,

hdu 1885 Key Task (三维bfs)

题目 之前比赛的一个题, 当时是崔老师做的,今天我自己做了一下.... 还要注意用bfs的时候  有时候并不是最先到达的就是答案,比如HDU 3442 这道题是要求最小的消耗血量伤害,但是并不是最先到达目标点的路径 就是最小的伤害,因为每一个点的伤害是 不一样的, 这种情况要用优先队列优化, 对伤害优化. 题意:*开始, X出口, b, y, r, g 代表钥匙,分别可以开B, Y, R, G颜色的门, 钥匙可以多次使用.问最短的步骤. 思路:vis[][][]数组开三维,第三维记录状态 是否拿

hdu 3345 War Chess (bfs+优先队列)

War Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1732    Accepted Submission(s): 416 Problem Description War chess is hh's favorite game: In this game, there is an N * M battle map, an

hdu 1728 逃离迷宫 (BFS)

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14376    Accepted Submission(s): 3458 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方

HDU 4039 The Social Network bfs

算了下复杂度好像是n^3 就感觉不大好做.结果n^31a... #include <cstdio> #include <algorithm> #include <iostream> #include <string.h> #include <map> #include <vector> #include <string> #include <queue> using namespace std; #define