当前位置: 首页 > news >正文

#T1359. 围成面积

题目描述

编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。

输入

10×10的图形。

输出

输出面积。

样例

输入数据 1

0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0

输出数据 1

15

来源

一本通在线评测

围成面积问题思路

问题分析:

计算由''字符围成的闭合区域面积,实际是统计被''包围的空白点数量。

核心思路:​​洪水填充法(Flood Fill)​

从边界开始向外扩散,标记所有能够到达的空白点,剩下的未被标记的空白点就是被包围的区域。

具体步骤:
  1. 1.

    ​预处理​​:

    • •将输入数据存储在10×10的字符矩阵中
    • •在矩阵外围添加一圈空白(作为边界起点)
  2. 2.

    ​边界洪水填充​​:

    • •从四个角点开始进行BFS/DFS遍历
    • •将所有与边界连通的空白点标记为已访问
  3. 3.

    ​统计内部空白点​​:

    • •遍历整个矩阵(不包括外围添加的边界)
    • •统计未被标记的空白点数量(这些就是被'*'包围的区域)
  4. 4.

    ​输出结果​​:

    • •内部空白点数量即为所求面积
算法选择:
  • •​​BFS(广度优先搜索)​​:更适合矩阵遍历,避免递归深度问题
  • •​​方向处理​​:四个方向(上、下、左、右)移动
关键点:
  1. 1.​​外围扩展​​:在10×10矩阵外添加一圈,确保能从边界开始填充
  2. 2.​​标记机制​​:使用visited数组记录可达点
  3. 3.​​边界条件​​:只处理空白点(非''字符),遇到''则停止扩散
复杂度分析:
  • •时间复杂度:O(n²) = O(100)
  • •空间复杂度:O(n²) = O(100)
示例验证:

对于样例输入,通过洪水填充后,内部未被标记的空白点正好是15个,与题目描述一致。

这种方法能够准确识别闭合区域,适用于各种形状的包围情况。

代码样例

#include<bits/stdc++.h>
using namespace std;char mp[12][12];
bool vis[12][12];
int dx[]= {0,0,1,-1};
int dy[]= {1,-1,0,0};void dfs(int x,int y)
{if(x<0 || x>11 || y<0 || y>11){return;}if(vis[x][y] || mp[x][y]=='1'){return;}vis[x][y]=1;for(int i=0; i<4; i++){dfs(x+dx[i],y+dy[i]);}
}int main()
{for(int i=0; i<12; i++){for(int j=0; j<12; j++){mp[i][j]='0';}}for(int i=1; i<=10; i++){for(int j=1; j<=10; j++){cin>>mp[i][j];}}dfs(0,0);int cnt=0;for(int i=1; i<=10; i++){for(int j=1; j<=10; j++){if(!vis[i][j] && mp[i][j]=='0'){cnt++;}}}cout<<cnt;return 0;
}

此代码仅供参考,请勿纯抄

http://www.dtcms.com/a/367206.html

相关文章:

  • Java并发编程:sleep()与wait()核心区别详解
  • 通过Interface扫描获取所有其实现类
  • AI 浪潮下阿里云“高光”乍现,但离终局胜利尚远
  • MySQL主从复制进阶(GTID复制,半同步复制)
  • 搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼
  • 鸿蒙NEXT动画开发指南:组件与页面典型动画场景解析
  • ios按键精灵提示 “设备信息丢失”如何处理?
  • 在Ant Design Vue 中使用图片预览的插件
  • Elixir通过Onvif协议控制IP摄像机,扩展ExOnvif的摄像头停止移动 Stop 功能
  • 【RNN-LSTM-GRU】第五篇 序列模型实战指南:从选型到优化与前沿探索
  • 对于数据结构:链表的超详细保姆级解析
  • 从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
  • 2025年财会领域专业资格认证选择指南
  • AR眼镜在智能制造的应用方向和场景用例|阿法龙XR云平台
  • BERT家族进化史:从BERT到LLaMA,每一次飞跃都源于对“学习”的更深理解
  • 【深度学习】P1 引言:深度学习的万家灯火
  • 网络安全初级-渗透测试
  • 下载apache-maven-3.6.1版本并配置maven镜像及本地仓库[超简单]
  • Hunyuan-MT-7B模型介绍
  • 告别低效广告!亚马逊关键词筛选全流程攻略
  • matlab版本粒子群算法(PSO)在路径规划中的应用
  • ultralytics/nn/tasks.py源码学习笔记——核心函数parse_model
  • 【正整数的最优分解2的次方和形式非0次方】2022-11-1
  • Java基础知识点汇总(五)
  • 什么是压力测试,有哪些方法
  • AI入坑: Trae 通过http调用.net 开发的 mcp server
  • IIS服务器下做浏览器缓存
  • 小白学OpenCV系列3-图像算数运算
  • jQuery 入门:一份献给初学者的完全指南
  • 怎么做到这一点:让 Agent 可以像人类一样 边听边想、边说,而不是“等一句话 → 一次性返回”