zoukankan      html  css  js  c++  java
  • 0 1 矩阵

     

    Description

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
    
    两个相邻元素间的距离为 1 。

    Input

    第一行两个整数n m ( 1 ≤ n,m ≤ 100 )
    接下来输入 n行 m列 的二维数组。
    3 3
    0 0 0
    0 1 0
    0 0 0

    Output

    输出每个元素到最近的 0 的距离。
    0 0 0
    0 1 0
    0 0 0
    
    

    Sample Input

    3 3
    0 0 0
    0 1 0
    1 1 1
    

    Sample Output

    0 0 0
    0 1 0
    1 2 1
    

     

     

    用BFS

     

     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 int m,n;
     5 int a[103][103];
     6 int dir[4][2]={1,0,0,1,-1,0,0,-1};//转向数组 
     7 int book[103][103];//标记数组 
     8 struct node{//定义结构体 
     9     int x;
    10     int y;
    11     int step;
    12     node(int xx,int yy,int step1):x(xx),y(yy),step(step1){}//构造函数 
    13 };
    14 queue<node> q;//队列 
    15 void bfs(){
    16     while(!q.empty()){//只要队列不为空 
    17         node s=q.front();//取队列第一个元素 
    18         for(int i=0;i<4;i++){//向该元素的四个方向搜索 
    19             int dx=s.x+dir[i][0];//新的x坐标 
    20             int dy=s.y+dir[i][1];//新的y坐标 
    21             if(dx>=1&&dx<=m&&dy>=1&&dy<=n&&a[dx][dy]==1&&book[dx][dy]==0){//如果在地图范围内,并且没有被标记过,并且格子值还为1 
    22                 book[dx][dy]=1;//标记该格子 
    23                 q.push(node(dx,dy,s.step+1));//把该格子加入队列 
    24                 a[dx][dy]=s.step+1;//把这个格子的值更新为它距离0最近的距离 
    25             }
    26         }
    27         q.pop();//弹出该元素 
    28     }
    29 }
    30 int main(){
    31     scanf("%d%d",&m,&n);
    32     for(int i=1;i<=m;i++){
    33         for(int j=1;j<=n;j++){
    34             scanf("%d",&a[i][j]);
    35             if(a[i][j]==0)//先把值为0的格子加入队列 
    36                 q.push(node(i,j,0));    
    37         }
    38     }
    39     bfs();
    40     for(int i=1;i<=m;i++){
    41         for(int j=1;j<=n;j++){
    42             printf("%d ",a[i][j]);
    43         }
    44         printf("
    ");
    45     }
    46     return 0;
    47 } 

     

  • 相关阅读:
    pug 基础篇
    胡里胡哨-老师改卷纸
    javaScript 原生技巧
    angular9的学习(十二)插槽
    typescript高级编程(二)
    typescript高级编程(一)
    ActiveMq 使用指北
    基于ZooKeeper的分布式锁实现
    windows下配置启动脚本并设置开机自启及相应关闭脚本
    腾讯位置服务JavaScript API GL实现文本标记的碰撞避让
  • 原文地址:https://www.cnblogs.com/fate-/p/12438947.html
Copyright © 2011-2022 走看看