zoukankan      html  css  js  c++  java
  • bjoi 2010 矩阵距离 BFS

    思路:BFS

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 #define MAXN 1100
     8 int d[MAXN][MAXN];
     9 char a[MAXN][MAXN];
    10 pair<int,int> Q[MAXN*MAXN];
    11 int n,m;
    12 int main()
    13 {
    14     int left=1,right=0;
    15     memset(d,0x3f,sizeof(d));
    16     int i,j,x,y;
    17     scanf("%d%d",&n,&m);
    18     for(i=0;i<n;i++)
    19          scanf("%s",a[i]);
    20     for(i=0;i<n;i++)
    21         for(j=0;j<m;j++)
    22             if(a[i][j]==49)
    23             {
    24                 d[i][j]=0;
    25                 Q[++right].first=i; Q[right].second=j;
    26             }
    27     while(left<=right)
    28     {
    29         x=Q[left].first; y=Q[left++].second;
    30         if(x>0&&d[x][y]+1<d[x-1][y]) 
    31         {
    32             d[x-1][y]=d[x][y]+1;
    33             Q[++right].first=x-1; Q[right].second=y;
    34         }
    35         if(y<m-1&&d[x][y]+1<d[x][y+1]) 
    36         {
    37             d[x][y+1]=d[x][y]+1;
    38             Q[++right].first=x; Q[right].second=y+1;
    39         }
    40         if(y>0&&d[x][y]+1<d[x][y-1]) 
    41         {
    42             d[x][y-1]=d[x][y]+1;
    43             Q[++right].first=x; Q[right].second=y-1;
    44         }
    45         if(x<n-1&&d[x][y]+1<d[x+1][y]) 
    46         {
    47             d[x+1][y]=d[x][y]+1;
    48             Q[++right].first=x+1; Q[right].second=y;
    49         }
    50     }
    51     for(i=0;i<n;i++)
    52     {
    53         for(j=0;j<m;j++)
    54             printf("%d ",d[i][j]);
    55         printf("\n");
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    和为S的连续正数序列
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    水仙花数
    数列求和
    数值统计
    奇数乘积
    求绝对值
    求两点的距离
  • 原文地址:https://www.cnblogs.com/myoi/p/2442974.html
Copyright © 2011-2022 走看看