zoukankan      html  css  js  c++  java
  • hdoj2612 Find a way (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612

    思路:

    这个题我wa了十多发QAQ。

    刚开始的思路是搜索每个‘@’,然后广搜该点到Y和M的最小距离之和,最后取最小值,然后TLE了。后来换个角度,可以从Y和M分别广搜到每个‘@’的距离,这样就只用bfs两次,不用担心超时。但这个题坑点在KFC也可以当作路,Y和M也可以当作路。

    AC代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct node{
     5     int x,y,s;
     6 }tmp;
     7 
     8 int n,m;
     9 char a[205][205];
    10 int vis[205][205];
    11 int b[2][205][205];
    12 int go[4][2]={-1,0,0,1,1,0,0,-1};
    13 
    14 void bfs(int x,int y,int k){
    15     memset(vis,0,sizeof(vis));
    16     queue<node> q;
    17     vis[x][y]=1;
    18     tmp.x=x,tmp.y=y,tmp.s=0;
    19     q.push(tmp);
    20     while(!q.empty()){
    21         node now=q.front();q.pop();
    22         int nx=now.x,ny=now.y,ns=now.s;
    23         if(a[nx][ny]=='@')
    24             b[k][nx][ny]=ns;
    25         for(int i=0;i<4;i++){
    26             int xx=nx+go[i][0],yy=ny+go[i][1];
    27             if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]!='#'&&!vis[xx][yy]){
    28                 vis[xx][yy]=1;
    29                 tmp.x=xx,tmp.y=yy,tmp.s=ns+1;
    30                 q.push(tmp);
    31             }
    32         }
    33     }
    34 }
    35 
    36 int main(){
    37     while(scanf("%d%d",&n,&m)!=EOF){
    38         int res=0x3f3f3f3f;
    39         for(int i=0;i<n;i++)
    40             scanf("%s",a[i]);
    41         for(int i=0;i<n;i++)
    42             for(int j=0;j<m;j++){
    43                 if(a[i][j]=='Y') bfs(i,j,0);
    44                 if(a[i][j]=='M') bfs(i,j,1);    
    45             }
    46         for(int i=0;i<n;i++)
    47             for(int j=0;j<m;j++)
    48                 if(a[i][j]=='@'&&b[0][i][j]&&b[1][i][j])
    49                     if(res>b[0][i][j]+b[1][i][j])
    50                         res=b[0][i][j]+b[1][i][j];
    51         printf("%d
    ",11*res);
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    三道 华为 面试题
    百度面试题01——50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
    一首笔试题 C实现
    图像缩放算法及速度优化——(一)最近邻插值
    一个简单的二叉树排序算法
    OS的四大特征
    OS的目的和功能
    桶排序
    快速排序
    OS的运行机制
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10356138.html
Copyright © 2011-2022 走看看