openjudge_2.5基本算法之搜索_166:The Castle

题目

166:The Castle
总时间限制: 1000ms 内存限制: 65536kB
描述
在这里插入图片描述
Figure 1 shows the map of a castle.Write a program that calculates

  1. how many rooms the castle has
  2. how big the largest room is
    The castle is divided into m * n (m<=50, n<=50) square modules. Each such module can have between zero and four walls.
    输入
    Your program is to read from standard input. The first line contains the number of modules in the north-south direction and the number of modules in the east-west direction. In the following lines each module is described by a number (0 <= p <= 15). This number is the sum of: 1 (= wall to the west), 2 (= wall to the north), 4 (= wall to the east), 8 (= wall to the south). Inner walls are defined twice; a wall to the south in module 1,1 is also indicated as a wall to the north in module 2,1. The castle always has at least two rooms.
    输出
    Your program is to write to standard output: First the number of rooms, then the area of the largest room (counted in modules).
    样例输入
    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

翻译

在这里插入图片描述

图Figure1显示shows了一个城堡的地图。写一个计算calculates程序

  1. 城堡有多少个房间
  2. 最大的房间有多大啊
    城堡被划分为m * n (m<=50, n<=50)个正方形square单元modules。每个这样的模块可以有零到四面墙。

输入
您的程序将从标准输入中读取数据。
第一行包含南北方向的模块数和东西方向的模块数。
在接下来的几行中,每个模块用一个数字(0 <= p <= 15)来描述。
这个数字是以下数的总和:1(=西面的墙),2(=北面的墙),4(=东面的墙),8(=南面的墙)。
内壁被定义了两次;
模块1,1中向南的墙也表示为模块2,1中向北的墙。
城堡总是至少有两个房间。

输出
您的程序将写入标准输出:首先是房间的数量,然后是最大房间的面积(以模块计算)。

理解

1.逐个访问房间,没算进去就算一个。宽搜能到达的所有房间。
请添加图片描述

2.墙数和=1+2+4+8。有8就是有右墙,减掉后,看有没有4,以此类推。
3.往左,就要判断到达房间有没有右墙
往左是0,对于到达房间判断右墙2,
往上是1,对于到达房间判断下墙3
往右是2,对于到达房间判断左墙0
往下是3,对于到达房间判断上墙1 请添加图片描述

代码

#include <bits/stdc++.h>
using namespace std;
struct room{
bool w[5],//有无左上右下四堵墙
k;//该房间算了没
int x,y,//坐标
n,//该套房子房间数
id;//该房间是哪一套
void set(int d,int xx,int yx){
x=xx,y=yx;
k=0,n=1;
if(d>=8)w[3]=1,d-=8;//下
if(d>=4)w[2]=1,d-=4;//右
if(d>=2)w[1]=1,d-=2;//上
if(d>=1)w[0]=1,d-=1;//下
}
}r[55][55];
int m,n,//行列数
dx,//该房间墙数和
z,//共有几套放
maxd,//所有套间的最大房间数
d[4][2]={{0,-1},{-1,0},{0,1},{1,0}};//左上右下顺序算房间
queue q;//宽搜队列
bool ok(int f,int x,int y){
//确定该坐标有没有房间,算过没,0123左上右下该墙有没有
if(f<2)f+=2;else f-=2;//往左0去,到达房间就是判断右墙2;1,判断3;2判0,3是1
return x>=1&&x<=m&&y>=1&&y<=n&&!r[x][y].k&&!r[x][y].w[f];
}
void view(){
cout<<“房间”<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)cout<<r[i][j].id<<“,”<<r[i][j].n<<“\t”;
cout<<endl;
}
}
int main(){
//freopen(“data.cpp”,“r”,stdin);
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
cin>>dx;
r[i][j].set(dx,i,j);//确定有哪些墙
}
int x,y,
rn;//房间数
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)//遍历每个房间
if(!r[i][j].k){//没算过该房间
z++;rn=1;//套件总数增加,房间数从0开始
q.push(r[i][j]);r[i][j].k=1;r[i][j].id=z;
while(!q.empty()){
room rx=q.front();q.pop();
for(int di=0;di<4;di++){
x=rx.x+d[di][0],y=rx.y+d[di][1];
if(ok(di,x,y)){
r[x][y].k=1,r[x][y].n=++rn;
r[x][y].id=z;
maxd=max(maxd,rn);
q.push(r[x][y]);
}
}
}
//view();
}
cout<<z<<“\n”<<maxd<<endl;
return 0;
}

小结

队列,宽搜就能完成。
关键就是墙数和=1+2+4+8,得要拆解。
还有往左走,就得判断左边房间得右墙。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 组件生命周期对比:Class vs. 函数式

在 React 中&#xff0c;Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比&#xff0c;详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点&#xff0c;以及如…

MySQL-触发器:触发器概述、触发器的创建、查看删除触发器、 触发器的优缺点

触发器 触发器1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 注&#xff1a;此为笔者学习尚硅谷-宋红康MySQL的笔记&#xff0c;其中包含个人的笔记和理解&#…

Matlab与ROS(1/2)---Simulink(二)

0. 简介 在上一章中我们详细介绍了ROS与Matlab链接的基础用法。这一章我们将来学习如何使用Matlab当中的Simulink来完成。Simulink对机器人操作系统(ROS)的支持使我们能够创建与ROS网络一起工作的Simulink模型。ROS是一个通信层&#xff0c;允许机器人系统的不同组件以消息的形…

前端HTML入门基础5(表单)

前端HTML入门基础5&#xff08;表单&#xff09; 表单-基本结构文本框和密码框单选框和复选框隐藏域确认按钮重置按钮普通按钮文本域下拉框禁用表单控件label标签fieldset与legend的使用 表单-基本结构 在HTML中&#xff0c;表单&#xff08;Forms&#xff09;是一种允许用户与…

嵌入式实时操作系统的调度机制与优化

大家好&#xff0c;今天给大家介绍嵌入式实时操作系统的调度机制与优化&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式实时操作系统的调度机制与优化 一、引言 嵌入式实…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证&#xff0c;但是由于物理量子比特的大规模制备以及噪声的影响&#xff0c;还没有办法再大规模的场景下应用。 这时候就需要我们思考&#xff0c;如何通过软件的方法怎么样把大的问题分解成小的问题&#xff0c;以便通过现在…

远程桌面防火墙是什么?

远程桌面防火墙&#xff0c;是一种针对远程桌面应用的安全防护工具。它可以在保证远程桌面连接的便利性和高效性的对网络连接进行安全性的保护&#xff0c;防止未经授权的访问和潜在的安全风险。 远程桌面防火墙的主要功能是对远程桌面连接进行监控和管理。它通过识别和验证连接…

cron表达式使用手册

cron表达式 我们在使用定时调度任务的时候&#xff0c;最常用的就是cron表达式。通过cron表达式来指定任务在某个时间点或者周期性执行。 范围&#xff1a; 秒&#xff08;0-59&#xff09;&#xff08;可选&#xff09; 分&#xff08;0-59&#xff09; 时&#xff08;0-…

ansible的常见用法

目录 ##编辑hosts文件 ##copy模块##复制过去 ##fetch模块##拉取 ##shell模块 ##好用 ##command模块## ##file模块### ##cron模块### ##crontab 计划任务 ##下载好时间插件 ##script模块 ##yum模块## ##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo ##ser…

Linux 使用 ifconfig 报错:Failed to start LSB: Bring up/down networking

一、报错信息 在运行项目时报错数据库连接失败&#xff0c;我就想着检查一下虚拟机是不是 Mysql 服务忘了开&#xff0c;结果远程连接都连接不上虚拟机上的 Linux 了&#xff0c;想着查一下 IP 地址看看&#xff0c;一查就报错了&#xff0c;报错信息&#xff1a; Restarting…

LeetCode34:在排序数组中查找元素的第一个和最后一个位置(Java)

目录 题目&#xff1a; 题解&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 题目&#xff1a; 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&…

Netty学习——高级篇2 Netty解码技术

接上篇&#xff1a;Netty学习——高级篇1 拆包 、粘包与编解码技术&#xff0c;本章继续介绍Netty的其他解码器 1 DelimiterBasedFrameDecoder分隔符解码器 DelimiterBasedFrameDecoder 分隔符解码器是按照指定分隔符进行解码的解码器&#xff0c;通过分隔符可以将二进制流拆分…

粘性定位应用

现象&#xff1a;当页面滑动到某个位置时&#xff0c;图片吸顶。 思路&#xff1a;创建一个father背景。包含内容和需要吸顶的背景图 当滚轮运动距离大于800px时&#xff0c;将吸顶图的position设置为sticky&#xff0c;距离顶部改为0px。 html代码&#xff1a; <!DOCTYPE …

基于PyTorch神经网络进行温度预测——基于jupyter实现

导入环境 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline读取文件 ### 读取数据文件 features pd.read_csv(temps.…

Linux第90步_异步通知实验

“异步通知”的核心就是信号&#xff0c;由“驱动设备”主动报告给“应用程序”的。 1、添加“EXTI3.c” #include "EXTI3.h" #include <linux/gpio.h> //使能gpio_request(),gpio_free(),gpio_direction_input(), //使能gpio_direction_output(),gpio_get_v…

有序二叉树的增删改查(源代码讲解)

有序二叉树的相关实体类 TreeNode类 二叉树结点类&#xff0c;包含三个属性&#xff1a;value&#xff0c;leftChild&#xff0c;rightChild 有序二叉树类就包括这样一个根节点 剩下的getter和setter方法&#xff0c;有参无参构造&#xff0c;toString方法都是老生长谈&…

Redis入门到通关之Hash命令

文章目录 ⛄介绍⛄命令⛄RedisTemplate API❄️❄️添加缓存❄️❄️设置过期时间(单独设置)❄️❄️添加一个Map集合❄️❄️提取所有的小key❄️❄️提取所有的value值❄️❄️根据key提取value值❄️❄️获取所有的键值对集合❄️❄️删除❄️❄️判断Hash中是否含有该值 ⛄…

阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层

大家好&#xff0c;今天给大家介绍阐述嵌入式系统的基本组成&#xff1a;硬件层、驱动层、操作系统层和应用层&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式系统是一种能…

Java集合(一)--Map(2)

ConcurrentHashMap与HashTable 底层实现 在JDK1.7时&#xff0c;底层采用的是分段数组&#xff0b;链表的形式&#xff0c;在JDK1.8之后&#xff0c;采用的是与HashMap相同的形式&#xff0c;数组链表/红黑树。而HashTable采用的是数组链表的形式。 如何实现线程安全 Concu…

如何访问远程服务器?

在现代技术时代&#xff0c;随着信息化的快速发展&#xff0c;远程访问服务器已经成为了不可或缺的一种需求。无论是企业还是个人用户&#xff0c;都需要通过远程访问来管理、传输和获取数据。本文将介绍一种名为【天联】的工具&#xff0c;它能够通过私有通道进行远程服务器访…