acwing1098. 城堡问题(bfs宽搜)「建议收藏」

acwing1098. 城堡问题(bfs宽搜)「建议收藏」1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####—#####—#—#####—# 2 # # | # # # # # #—#####—#####—#####—# 3 # | | # # # # # #—#########—#####–…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

    1   2   3   4   5   6   7  
   #############################
 1 # | # | # | | #
   #####---#####---#---#####---#
 2 # # | # # # # #
   #---#####---#####---#####---#
 3 # | | # # # # #
   #---#########---#####---#---#
 4 # # | | | | # #
   #############################
           (图 1)

   # = Wall 
   |  = No wall
   -  = No wall

方向:上北下南左西右东。
图1是一个城堡的地形图。

请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。

城堡被分割成 m∗n个方格区域,每个方格区域可以有0~4面墙。

注意:墙体厚度忽略不计。

输入格式
第一行包含两个整数 m 和 n,分别表示城堡南北方向的长度和东西方向的长度。

接下来 m 行,每行包含 n 个整数,每个整数都表示平面图对应位置的方块的墙的特征。

每个方块中墙的特征由数字 P 来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,P 为该方块包含墙的数字之和。

例如,如果一个方块的 P 为3,则 3 = 1 + 2,该方块包含西墙和北墙。

城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。

输入的数据保证城堡至少有两个房间。

输出格式
共两行,第一行输出房间总数,第二行输出最大房间的面积(方块数)。

数据范围
1≤m,n≤50,
0≤P≤15

输入样例:
4 7 
11 6 11 6 3 10 6 
7 9 6 13 5 15 5 
1 10 12 7 13 7 5 
13 11 10 8 10 12 13 
输出样例:
5
9

题解
bfs

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int,int>PII;
const int N = 55,M = 55;
int g[N][M],vis[N][N];
int n,m;
PII q[N * N];
int hh = 0,tt = 0;
int dx[4] = { 
0,-1,0,1},dy[4] = { 
-1,0,1,0};
int bfs(int x,int y){ 

hh = 0,tt = 0;
q[tt ++] = { 
x,y};
int area = 0;
while(hh < tt){ 

PII t = q[hh ++];
if(vis[t.x][t.y])continue;
vis[t.x][t.y] = true;
area ++;
for(int k = 0;k < 4;k ++){ 

int a = t.x + dx[k],b = t.y + dy[k];
if(g[t.x][t.y] >> k & 1)continue;
if(a < 0 || a >= n || b < 0 || b >= m)continue;
q[tt ++] = { 
a,b};
}
}
return area;
}
int main(){ 

cin>>n>>m;
for(int i = 0;i < n;i ++){ 

for(int j = 0;j < m;j ++){ 

cin>>g[i][j];
}
}
int cnt = 0,marea = 0;
for(int i = 0;i < n;i ++){ 

for(int j = 0;j < m;j ++){ 

if(!vis[i][j]){ 

marea = max(marea,bfs(i,j));
cnt ++;
}
}
}
cout<<cnt<<endl<<marea<<endl;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168853.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【LDC1314】电感传感器中文手册与检测原理介绍

    【LDC1314】电感传感器中文手册与检测原理介绍关键词:LDC1314,电感传感器,金属传感器,中文手册【声明:本博文参考TI官方手册翻译而成,旨在帮助大家快速了解这款芯片,如翻译有误欢迎评论指出,转载需注明来源!】以下是我对TI官方手册的人肉翻译,截取了其中的关键部分,有助于大家更好的撸底层驱动和排查硬件问题。相关博客:【LDC1314】金属传感器(电感传感器)的调试技巧首先,是引脚位的定义与说明:引脚 引脚类型…

  • JDK的下载、安装和环境配置教程(2021年,win10)

    JDK的下载、安装和配置JDK的下载输入下载地址:https://www.oracle.com/downloads/往下拉,看到DeveloperDownloads,点击java点击Java(JDK)forDevelopers选择你想要下载的jdk版本点击JDKDownloads,往下拉,(有可能会提示先登录账号,才能下载。没账号的可以注册一个)我的系统是Windows的64位,个人偏爱压缩版,所以选择了jdk-14.0.1_windows-

  • 视频编解码算法面试总结

    视频编解码算法面试总结H.264与H.265的主要差异H.265仍然采用混合编解码,编解码结构域H.264基本一致, 主要的不同在于: 1.编码块划分结构:采用CU(CodingUnit)、PU(PredictionUnit)和TU(TransformUnit)的递归结构。 2.基本细节:各功能块的内部细节有很多差异 3.并行工具:增加了Tile以及WPP等并行工具集以提高编码速度

  • 四旋翼飞行器结构和原理「建议收藏」

    四旋翼飞行器结构和原理前言:前年做电赛时留下的一套四旋翼飞行器如今只剩下四个旋翼和电机(不知道被谁给拆了,组装零件找不到了),趁着国庆几天假期,希望能够快速的将其重新DIY出来。其中控制和驱动板卡可以暂时先由面包板焊接出来,等验证成功能飞的起来时在重新设计集成电路板来实现整机。

  • codeif idea_ps插件安装在什么位置

    codeif idea_ps插件安装在什么位置1、点击File->Settings->Plugins->设置->InstallPluginfromDisk2、选中MappingSearch.jar3、重启IDEA,在Help菜单下有个“MappingSearch映射搜索”选项表示安装成功此后就可以使用插件的变量名搜索功能,右键CodeIf,则会弹出许多适合的变量名。以后就不用头秃的想变量名问题了。附上jar包下载地址:https://download.csdn.net/download/qq_44752641/1

  • springboot上传文件显示上传进度[通俗易懂]

    springboot上传文件显示上传进度[通俗易懂]springboot上传文件显示上传进度创建maven依赖 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号