news 2026/6/12 9:24:04

UVa 469 Wetlands of Florida

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 469 Wetlands of Florida

题目描述

题目要求计算包含指定水域单元格的湖泊面积。网格由W(水)和L(陆地)组成,相邻定义包括八个方向(上、下、左、右及四个对角线)。对于每个查询(给出水单元格的行和列坐标),输出该单元格所在连通水域的面积(即连通分量中W的数量)。

输入格式

第一行一个整数NNN,表示测试用例的数量,后面跟一个空行。每个测试用例的第一部分为网格描述:若干行,每行一个由WL组成的字符串,表示网格的一行。网格行数nnn和列数mmm满足0<n,m≤990 < n, m \le 990<n,m99。网格描述后跟若干行,每行两个整数iiijjj,表示查询的水单元格坐标(行和列,从111开始)。输入以文件结束符(EOF\texttt{EOF}EOF)终止。两个连续测试用例之间由一个空行分隔。

输出格式

对于每个查询,输出一行一个整数,表示该湖泊的面积。两个连续测试用例的输出之间由一个空行分隔。

样例

输入

1 LLLLLLLLLL LLLWLLWLL LWWLLLLLL LWWLLWWLL LLLWWLLLL LLLLLLLLL LLLWWLLWL LLLWLLLLL LLLLLLLLL 3 2 7 5

输出

12 4

题目分析

本题的核心是计算二维网格中八连通水域的连通分量大小。

连通性

八个方向包括:上、下、左、右、左上、右上、左下、右下。因此,洪水填充(Flood Fill\texttt{Flood Fill}Flood Fill)时需要遍历所有888个邻居。

算法

  • 对于每个查询,从指定位置开始执行深度优先搜索(DFS\texttt{DFS}DFS)或广度优先搜索(BFS\texttt{BFS}BFS),统计所有可达的W单元格数量。
  • 为避免重复计数,可以将已访问的W临时标记为其他字符(如X),统计完成后恢复(或使用单独的访问标记数组)。

注意事项

  • 网格大小最大为99×9999 \times 9999×99,每次查询重新搜索完全可接受。
  • 坐标从111开始,需要转换为000索引或直接在111索引数组上操作。

复杂度分析

每次查询最多访问所有单元格,时间复杂度O(n×m)O(n \times m)O(n×m)n,m≤99n, m \le 99n,m99,查询次数未知但总可接受。

代码实现

// Wetlands of Florida// UVa ID: 469// Verdict: Accepted// Submission Date: 2016-07-16// UVa Run Time: 0.030s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;charmatrix[110][110];intcounter,row=0,column=0;voidrestore(){for(inti=1;i<=row;i++)for(intj=1;j<=column;j++)if(matrix[i][j]=='X')matrix[i][j]='W';}voidflood_fill(intr,intc){if(r>=1&&r<=row&&c>=1&&c<=column){if(matrix[r][c]=='W'){counter++;matrix[r][c]='X';for(inti=-1;i<=1;i++)for(intj=-1;j<=1;j++){if(i==0&&j==0)continue;flood_fill(r+i,c+j);}}}}intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line;getline(cin,line);intcases=stoi(line);getline(cin,line);for(inti=1;i<=cases;i++){if(i>1)cout<<endl;row=0;while(getline(cin,line),line.length()>0){if(isalpha(line.front())){for(intj=0;j<line.length();j++)matrix[row+1][j+1]=line[j];row++;column=line.length();}else{istringstreamiss(line);intcell_row,cell_column;iss>>cell_row>>cell_column;counter=0;flood_fill(cell_row,cell_column);restore();cout<<counter<<'\n';}}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 9:20:36

JetBrains IDE试用期重置工具:2026年免费延长30天的终极指南

JetBrains IDE试用期重置工具&#xff1a;2026年免费延长30天的终极指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗&#xff1f;无论是IntelliJ IDEA、PyCharm、WebSt…

作者头像 李华
网站建设 2026/6/12 9:17:35

Unity轻量级物体轮廓高亮源码包(含Shader+脚本,支持URP与Built-in)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;一套开箱即用的Unity轮廓描边实现方案&#xff0c;包含OutlineEffect.cs控制脚本和配套自定义Shader&#xff0c;能对任意MeshRenderer或SkinnedMeshRenderer对象添加可调参数的外轮廓高亮效果。支持按摄像机视…

作者头像 李华
网站建设 2026/6/12 9:16:36

基于 Harmony 6.0 应用的宿舍报修与评价系统首页实现

基于 Harmony 6.0 应用的宿舍报修与评价系统首页实现 前言 宿舍是大学生第二个家——但水管漏水、空调坏掉、灯不亮等小故障层出不穷。一款好的宿舍报修应用要把"我的报修 / 进度跟踪 / 维修师傅 / 满意度评价"四件事在一屏内全部铺到。Harmony 6.0 时代&#xff0c;…

作者头像 李华