洛谷P1162-填涂颜色(DFS)

简介: 洛谷P1162-填涂颜色(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(1≤n≤30)

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

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


输出格式:


已经填好数字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  


AC Code:


#include<bits/stdc++.h>
using namespace std;
#define N 50 
int a[N][N];//转换地图的数组 
int dx[]={0,0,-1,1};//两个方向数组 
int dy[]={1,-1,0,0};
int n;
void dfs(int x,int y) {
  a[x][y]=3;//把外部可以搜索到的0修改为3 
  for(int i=0;i<4;i++) {//四个方向搜索 
    int tx=x+dx[i];
    int ty=y+dy[i];
    if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&a[tx][ty]==0) {
    //不越界,并且这个点是0 
      dfs(tx,ty);//继续下一个点的搜索 
    }
  }
}
int main() {
  scanf("%d",&n);
  for(int i=1;i<=n;i++) {
    for(int j=1;j<=n;j++) {
      scanf("%d",&a[i][j]);//地图全部都是0,1数字,所以直接开int整型数组就行 
    }
  }
  //从最外圈开始向内圈搜索 
  //最外圈由第一行、最后一行、第一列、最后一列构成
  for(int i=1;i<=n;i++) {//搜索第一行和最后一行
    if(a[1][i]==0) {//第一行共有m列 
      dfs(1,i);
    }
    if(a[n][i]==0) {//第n行,即最后一行共有m列 
      dfs(n,i);
    }
  }
  for(int j=1;j<=n;j++) {//搜索第一列和最后一列 
    if(a[j][1]==0) {//第一列共有n行 
      dfs(j,1);
    }
    if(a[j][n]==0) {//第m列,即最后一列共有n行 
      dfs(j,n);
    }
  }
  for(int i=1;i<=n;i++) {
    for(int j=1;j<=n;j++) {
      if(a[i][j]==0) {
       /*因为从最外圈开始搜索,每搜索一圈,都可以将外部未被包围的0修改为1,
            而最终那些一直都是0,没有被修改过的点,就是被包围起来的数字2方阵*/
        a[i][j]=2;
      }
    }
  }
  for(int i=1;i<=n;i++) {
    for(int j=1;j<=n;j++) {
      if(a[i][j]==3) {
      /*此时我们已经将外部可以搜索到的0全部修改为了3
      而输出样例中被我们修改为3的点还要再修改为0*/ 
        a[i][j]=0;
      }
    }
  }
  for(int i=1;i<=n;i++) {//所有工作完成,最后打印方阵 
    for(int j=1;j<=n;j++) {
      printf("%d ",a[i][j]);
    }
    printf("\n");
  }
  return 0;
}


相关文章
|
10月前
|
人工智能 监控 数据可视化
什么是低代码平台,低代码平台有哪些优势?
低代码平台通过可视化建模和模块化设计减少编码需求,加速应用开发。其核心技术包括描述式编程和模型驱动开发,支持数据结构自动化管理、业务规则自动执行和模块间自动集成。相比传统开发,低代码平台提高了开发效率,支持微服务架构、事件驱动架构和自动化测试。低代码平台适用于数据分析、智能应用集成和跨平台应用开发等多种场景,未来将结合AI技术,实现更灵活的配置和自动化开发。访问官网:http://www.jeelowcode.com,演示地址:http://demo.jeelowcode.com:8088,源码地址:https://gitee.com/jeelowecode/JeeLowCode。
295 0
|
数据采集 机器学习/深度学习 Python
深度学习中的高效数据预处理技巧
【7月更文第29天】在构建深度学习模型时,数据预处理是至关重要的步骤之一。高质量的数据预处理可以显著提高模型的性能并加速训练过程。本文将探讨几种有效的数据预处理技巧,包括数据清洗、特征归一化和数据增强,并通过实际的Python代码示例进行说明。
1171 5
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用问题之如何在EMR-Flink的Flink SOL中针对source表单独设置并行度
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
208 3
|
消息中间件 监控 API
微服务的主要组件
【8月更文挑战第22天】
859 0
|
机器学习/深度学习 并行计算 编译器
AVX2指令集简介和代码示例
这篇文章介绍了AVX2指令集,它是Intel在2013年为提高处理器并行计算能力引入的SIMD技术。AVX2增强了整数运算,包括256位操作和位操作,还提供了FMA指令及更多广播和转换功能。与AVX相比,AVX2在图像处理和媒体编码等领域有显著优势。文章通过一个C代码示例展示了如何使用AVX2进行向量加法,并提醒编译时需确保支持AVX2指令集。
3268 4
|
弹性计算 Ubuntu Linux
阿里云ECS服务器,如何一键部署幻兽帕鲁游戏教程
本文分享阿里云ECS服务器,如何一键部署幻兽帕鲁游戏教程。
531 5
|
存储 编解码 算法
音视频编程ffmepg中的关键术语与概念:深度解析与实践(二)
音视频编程ffmepg中的关键术语与概念:深度解析与实践
412 0
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
420 0

热门文章

最新文章