• 洛谷 1162 填涂颜色 (dfs,染色法)


    题目描述

    由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下:

    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1

    输入输出格式

    输入格式:

    每组测试数据第一行一个整数n(1n30)

    接下来n行,由0和1组成的n×n的方阵。

    方阵内只有一个闭合圈,圈内至少有一个00。

    //感谢黄小U饮品指出本题数据和数据格式不一样. 已修改(输入格式)

    输出格式:

    已经填好数字2的完整方阵。

    输入输出样例

    输入样例
    6
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1
    
    输出样例
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1
    

    说明

    1n30

    染色法:

     

     1 #include<stdio.h>
     2 int n,Map[32][32],a[32][32],dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
     3 void dfs(int x,int y){
     4     if(x<0||x>n+1||y<0||y>1+n||Map[x][y]!=0) //考虑第一排都是1,如果范围不是这样的,那就算后面符合,也直接return了
     5         return;
     6     Map[x][y]=1;//染色
     7     for(int i=0;i<4;i++){
     8         dfs(x+dir[i][0],y+dir[i][1]);
     9     }
    10 }
    11 
    12 int main(){
    13     while(scanf("%d",&n)!=EOF){
    14         for(int i=1;i<=n;i++){
    15             for(int j=1;j<=n;j++){
    16                 scanf("%d",&a[i][j]);
    17                 if(a[i][j]==0) 
    18                     Map[i][j]=0;
    19                 else 
    20                     Map[i][j]=1;
    21             }
    22         }
    23         dfs(0,0);
    24         for(int i=1;i<=n;i++){
    25             for(int j=1;j<=n;j++){
    26                 if(Map[i][j]==0)//如果全部染完色了还是0,那它就被包围起来了
    27                     printf("2 ");
    28                 else
    29                     printf("%d ",a[i][j]);//按照原来的样子输出
    30             }
    31             printf("
    ");
    32         }
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    子类调用父类被重写的方法
    Linux下编译出现undefined reference to ‘pthread_create’问题解决
    CRC校验8
    嵌入式C语言查表法
    Static关键字,遇到的问题_1
    java中方法的参数传递机制_一个对象被当作参数传递到一个方法后
    String使用equals和==比较的区别
    如何导入XML数据 (python3.6.6区别于python2 环境)
    0xx_PHP核心01
    PHP_MVC设计模式02
  • 原文地址:https://www.cnblogs.com/cake-lover-77/p/10301774.html
Copyright © 2020-2023  润新知