zoukankan      html  css  js  c++  java
  • 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
    ",ans*11);
            }
            return 0;
    }
    

      

  • 相关阅读:
    aws centos 基本环境安装
    aws 安装python解释器
    odoo 开发环境部署
    graphql规范
    python 字符串format使用
    设计模式
    集合的常见操作
    字典常见操作
    python实现简单的购物车
    python实现简单的登录管理
  • 原文地址:https://www.cnblogs.com/xuesu/p/4338208.html
Copyright © 2011-2022 走看看