热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

uva1103_AncientMessages(找一幅图中有多少洞)

输入:01矩阵,带有多个黑连通块。输出:分别输出各个黑连通块内的白洞个数。分析:突破点在于区分开洞内0和洞外0。方案:1.填充外围的0,全标记为数字2。2.对每个黑连通块dfs,在

输入:01矩阵,带有多个黑连通块。

输出:分别输出各个黑连通块内的白洞个数。

 

分析:突破点在于区分开洞内0和洞外0。

方案:

   1.填充外围的0,全标记为数字2。  

   2.对每个黑连通块dfs,在dfs的过程中,如果碰到了0,则以其为出发点用dfs填充一次,全标记为2。遇到0的次数即为此黑连通块内的白洞个数。

技术分享图片技术分享图片

#include
using namespace std;
const int maxH = 200 + 5;
const int maxW = 50 + 5;
int H, W;
char buf[maxH][maxW<<2];
char color[maxH][maxW<<2];
bool vis[maxH][maxW<<2];
char *Hex2Bit[16] = {"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};
char code[6] = {W, A, K, J, S, D};
int dr[4] = {-1, 0, 1, 0};
int dc[4] = {0, 1, 0, -1};
//对非洞内0像素点填充2 ,以区分洞内0像素点
void dfs(int r, int c)
{
buf[r][c]
= 2;
vis[r][c]
= true;
for(int i = 0; i <4; i++){
int rr = r + dr[i];
int cc = c + dc[i];
if(rr > 0 && rr 1 && cc > 0 && cc 4 + 1 &&
buf[rr][cc]
== 0 && !vis[rr][cc]){
dfs(rr, cc);
}
}
}
int cnt;
//对洞0像素点填充2,
void dfs2(int r, int c)
{
buf[r][c]
= 2;
vis[r][c]
= true;
for(int i = 0; i <4; i++){
int rr = r + dr[i];
int cc = c + dc[i];
if(rr > 0 && rr 1 && cc > 0 && cc 4 + 1){
if(buf[rr][cc] == 0){
cnt
++;
dfs(rr, cc);
}
if(buf[rr][cc] == 1 && !vis[rr][cc]){
dfs2(rr, cc);
}
}
}
}
int main()
{
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
int kase = 0;
while(cin >> H >> W && H && W){
memset(vis,
0, sizeof(vis));
char s[maxW];
for(int i = 1; i <= H; i++){
scanf(
"%s", s);
int len = strlen(s);
for(int j = 0; j ){
int idx = s[j] >= a ? s[j] - a + 10 : s[j] - 0;
strncpy(buf[i]
+ 4*j + 1, Hex2Bit[idx], 4);
}
//printf("%s\n", buf[i]);
}
// for(int i = 0; i <= H + 1; i++){
// for(int j = 0; j <= (W<<2) + 1; j++){
// printf("%c", buf[i][j]);
// }
// printf("\n");
// }
//dfs将外面的空白全标记为‘2‘,以区分内白格。
for(int j = 1; j <= (W<<2); j++){
if(buf[1][j] == 0){
dfs(
1, j);
}
if(buf[H][j] == 0){
dfs(H, j);
}
}
for(int i = 1; i <= H; i++){
if(buf[i][1] == 0){
dfs(i,
1);
}
if(buf[i][W<<2] == 0){
dfs(i, W
<<2);
}
}
// for(int i = 0; i <= H + 1; i++){
// for(int j = 0; j <= (W<<2) + 1; j++){
// printf("%c", buf[i][j]);
// }
// printf("\n");
// }
vector<char>ans;
for(int i = 1; i <= H; i++){
for(int j = 1; j <= (W<<2); j++){
if(buf[i][j] == 1){
cnt
= 0;
dfs2(i, j);
ans.push_back(code[cnt]);
}
}
}
sort(ans.begin(), ans.end());
printf(
"Case %d: ", ++kase);
for(auto i : ans){
cout
<< i;
}
cout
<< endl;
}
return 0;
}


View Code

 


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
author-avatar
Aa小鱼帮您戒烟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有