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

news2024/9/21 2:43:59

题目

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.coloradmin.cn/o/1597240.html

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

相关文章

如何应对Android面试官 -> startActivity 流程详解

前言 本章主要讲解下 Activity 的启动流程&#xff1b; 整体概念 点击桌面图标&#xff0c;启动目标应用程序的 Activity&#xff0c;首先会跟 AMS 打交道&#xff0c;也就是 SystemServer 进程中启动的AMS&#xff0c;Launcher 进程和 SystemServer 进程中的 AMS 通信「一次跨…

(九)C++自制植物大战僵尸游戏自定义对话框的实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 对话框在游戏的交互中非常重要。在游戏中&#xff0c;对话框不仅可以提醒用户下达任务指令&#xff0c;而且还可以让用户进行操作&#xff0c;自定义游戏中的各种属性。对话框在游戏的交互中非常常见且大量使用。Co…

树莓集团与天府新区信息职业学院在国际数字影像产业园成功举办授牌仪式

2024年4月12日&#xff0c;树莓集团与天府新区信息职业学院共同在国际数字影像产业园举办授牌仪式。这场仪式不仅标志着双方合作的正式开启&#xff0c;更是为未来的产教融合、学生实训与就业推荐树立了坚实的基石。 仪式上&#xff0c;天府新区信息职业学院领导与树莓集团的代…

Qt QStyle详解

1.简介 QStyle类是 Qt 框架中用于控制应用程序界面元素外观的一个抽象基类。这个类提供了一种方式来定制窗口部件&#xff08;widgets&#xff09;的绘制和行为&#xff0c;可以通过改变主题或风格来更改应用程序的外观&#xff0c;而无需修改窗口部件本身的代码。 Qt包含一组…

抽奖系统设计

如何设计一个百万级用户的抽奖系统&#xff1f; - 掘金 如何设计百万人抽奖系统…… 在实现抽奖逻辑时&#xff0c;Redis 提供了多种数据结构&#xff0c;选择哪种数据结构取决于具体的抽奖规则和需求。以下是一些常见场景下推荐使用的Redis数据结构&#xff1a; 无序且唯一奖…

系统边界图

系统边界图的定义&#xff1a; 系统边界图是系统工程和软件工程中的一种图形化工具&#xff0c;用于描述系统与外部世界之间的交互和界限。它展示了系统的组成部分以及这些组件如何与外部实体进行通信和交互。系统边界图通常包括系统内部的各个组件、外部实体以及它们之间的通信…

【Qt】:事件的处理

系统相关 一.鼠标事件二.键盘事件三.定时器 事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在个同的的刻友出的。当用广投下鼠标、敲下键盘&#xff0c;或者是窗口需要…

掼蛋残局技巧

一、根据对手张数出牌 口诀&#xff1a;十打二来九打一&#xff0c;打成八张不着急&#xff1b; 对手七张或八张&#xff0c;可以反手打一夯&#xff1b; 五打二来六打三&#xff0c;打得对手把眼翻&#xff1b; 枪不打四&#xff1b; 两张&#xff1a;出两张以上的牌&#xff…

AI预测福彩3D第36弹【2024年4月15日预测--第8套算法开始计算第4次测试】

今天咱们继续测试第8套算法和模型&#xff0c;今天是第3次测试&#xff0c;目前的测试只是为了记录和验证&#xff0c;不建议大家盲目跟买。。我的目标仍旧是10次命中3-4次!~废话不多说了&#xff0c;直接上结果&#xff01; 2024年4月15日3D的七码预测结果如下 第一套…

【Leetcode每日一题】 动态规划 - 下降路径最小和(难度⭐⭐)(55)

1. 题目解析 题目链接&#xff1a;931. 下降路径最小和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了. 2.算法原理 对于这类路径类问题&#xff0c;通常我们首先需要分析状态表示以及状态转移的过程。特别地&#xff0c;本题涉及…

虚良SEOPython脚本寄生虫程序源码

本程序&#xff0c;快速收录百度首页&#xff0c;3-5天就可以有流量&#xff0c;长期稳定&#xff0c;可以设置自动推送。 点这里 Python脚本寄生虫程序源码&#xff08;寄生虫电影脚本&#xff09; - 虚良SEO 模板可以自己修改&#xff0c;源码带模板标签说明&#xff0c;简…

106.从中序与后序遍历构造二叉树

给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 思路&#xff1a; 中序遍历数组中&#xff0c;找到一个根节点&#xff0c;那么其前为其左子树&a…

CameraCtrl、EDTalk、Sketch3D、Diffusion^2、FashionEngine

本文首发于公众号&#xff1a;机器感知 CameraCtrl、EDTalk、Sketch3D、Diffusion^2、FashionEngine NVINS: Robust Visual Inertial Navigation Fused with NeRF-augmented Camera Pose Regressor and Uncertainty Quantification In recent years, Neural Radiance Fields …

【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析完整AC代码】(L2-001 - L2-024)搞懂了赛场上拿下就稳了

L2-001 紧急救援 最短路路径打印 样例 输入1 4 5 0 3 20 30 40 10 0 1 1 1 3 2 0 3 3 0 2 2 2 3 2输出1 2 60 0 1 3分析 用一遍dijkstra算法。设立 n u m [ i ] num[i] num[i]和 w [ i ] w[i] w[i]表示从出发点到i结点拥有的路的条数&#xff0c;以及能够找到的救援队的数目…

吴恩达llama课程笔记:第六课code llama编程

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

Avalonia中MVVM模式下设置TextBox焦点

Avalonia中MVVM模式下设置TextBox焦点 前言引入Nuget库程序里面引入相关库修改前端代码#效果图 前言 我们在开发的过程中,经常会遇到比如我在进入某个页面的时候我需要让输入焦点聚焦在指定的文本框上面,或者点击某个按钮触发某个选项的时候也要自动将输入焦点聚焦到指定的文…

Linux中断(栈、上下部)

进程线程中断的核心&#xff1a;栈 进程切换时&#xff0c;需要将当前进程的寄存器参数保存在当前进程的栈中。要再次执行此进程时需要先从栈中恢复此进程的寄存器参数。 对于同个进程的不同线程&#xff0c;代码和数据是所有线程共享的&#xff0c;所以线程间可以通过全局变量…

白盒测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概念与定义 白盒测试&#xff1a;侧重于系统或部件内部机…

ASUS华硕ROG幻13笔记本电脑GV301R工厂模式原厂OEM预装Windows11系统,恢复出厂开箱状态

适用于型号&#xff1a;GV301RC、GV301RE、GV301RA 工厂模式安装包&#xff1a;https://pan.baidu.com/s/1gLme1VqidpUjCLocgm5ajQ?pwddnbk 提取码&#xff1a;dnbk 工厂模式Win11安装包带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志…

Matlab|基于广义Benders分解法的综合能源系统优化规划

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…