zoukankan      html  css  js  c++  java
  • BZOJ 2252: [2010Beijing wc]矩阵距离

    题目

    2252: [2010Beijing wc]矩阵距离

    Time Limit: 10 Sec  Memory Limit: 256 MB

    Description

    假设我们有矩阵,其元素值非零即1

    a11…… a1m

    …………….

    an1…….anm

     

    定义aij与akl之间的距离为D(aij,akl)=abs(i-k)+abs(j-L) 

    Input

    输入文件的第一行为两个整数,分别代表n和m。 
    接下来的n行,第i行的第 j个字符代表aij

    Output

    输出包含N行,每行M个用空格分开的数字,其中第i行第J个数字代表
    Min(D(aij,axy) 1<=x<=N 1<=y<m,且axy=1

    Sample Input

    3 4
    0001
    0011
    0110

    Sample Output

    3 2 1 0
    2 1 0 0
    1 0 0 1

    HINT

    对于100%的数据,满足 0 <  m n <=1000

    题解

    好吧,就是一个宽搜,而且根据宽搜的性质,所以每个点只需要经过一次就足够了。

    代码

     1 /*Author:WNJXYK*/
     2 #include<cstdio>
     3 #include<queue>
     4 using namespace std;
     5 
     6 int dist[1005][1005];
     7 
     8 int n,m;
     9 int dx[]={0,1,0,-1,0};
    10 int dy[]={0,0,1,0,-1};
    11 inline char read(){
    12     char x;
    13     x=getchar();
    14     while(x!='1' && x!='0') x=getchar();
    15     return x;
    16 }
    17 struct xy{
    18     int x,y;
    19     xy(){}
    20     xy(int a,int b){
    21         x=a;y=b;
    22     }
    23 };
    24 queue<xy> que;
    25 
    26 inline void bfs(){
    27     
    28     while(!que.empty()){
    29         int x=que.front().x,y=que.front().y;
    30         que.pop();
    31         for (int k=1;k<=4;k++){
    32             int nx=x+dx[k],ny=y+dy[k];
    33             if (nx<1 || nx>n || ny<1 || ny>m || dist[nx][ny]!=-1) continue;
    34             dist[nx][ny]=dist[x][y]+1;
    35             que.push(xy(nx,ny));
    36         }    
    37     }
    38     
    39 } 
    40 int main(){
    41     scanf("%d%d",&n,&m);
    42     for (int i=1;i<=n;i++){
    43         for (int j=1;j<=m;j++){
    44             if (read()=='0') dist[i][j]=-1; else {dist[i][j]=0;que.push(xy(i,j));}
    45         }
    46     }
    47     bfs();
    48     for (int i=1;i<=n;i++){
    49         for (int j=1;j<=m;j++){
    50             printf("%d ",dist[i][j]);
    51         } 
    52         printf("
    ");
    53     }
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    特效优化
    Jsp
    JRebel 热部署
    mysql
    行为树
    Medium | LeetCode 139. 单词拆分 | 动态规划
    Medium | LeetCode 31. 下一个排列
    Easy | LeetCode 27. 移除元素 | 快慢指针
    Medium | LeetCode 437. 路径总和 III | 树 + 回溯 + 前缀和
    Medium | LeetCode 337. 打家劫舍 III | 树后序遍历 + 动态规划
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4161753.html
Copyright © 2011-2022 走看看