程序设计与算法(二)算法基础8.4城堡问题
题目描述:
下图是一个城堡的地形图请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡
被分割成m*n(m≤50,n≤50)个方块,每个方块可以有0~4面墙。
输入
程序从标准输入设备读入数据。
第一行是两个整数,分别是南北向、东西向的方块数。
在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙, 4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2, 1)的北墙。
输入的数据保证城堡至少有两个房间。
输出
城堡的房间数、城堡中最大房间所包括的方块数。
样例1输入:
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
样例1输出:
5
9
#include<bits/stdc++.h>
using namespace std;
int room=0,maxs=0,rooms=0;
int wall[61][61],flag[61][61];
void find(int i,int j){if(flag[i][j])return;flag[i][j]=1;rooms++;for(int k=0;k<=3;k++){if(!((wall[i][j]>>k)&1)){switch(k){case 0:find(i,j-1);break;case 1:find(i-1,j);break;case 2:find(i,j+1);break;case 3:find(i+1,j);break;}}}
}
int main(){int m,n;cin>>m>>n;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>wall[i][j];flag[i][j]=0;}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(flag[i][j]==0){room++;rooms=0;find(i,j);if(rooms>maxs)maxs=rooms;}}}cout<<room<<endl<<maxs<<endl;
}
思路:
1.数据处理方面,墙为8421码,可以采用按位与1的方式观察是否有墙;
2.输入数据后深度优先搜索整个数组,遇到没有插旗子(flag=0)的,即找到了新的房间,进行搜索;
3.搜索房间时,首先要在这个格子上插上棋子(flag=1),然后遍历观察四面墙,找到新格子后继续搜索,直到搜到的格子的周围除了墙就是旧格子为止。在搜索的过程中面积++即可。
程序设计与算法(二)算法基础8.4城堡问题相关推荐
- 例题代码|程序设计与算法(二) 算法基础 北大 郭炜 中国大学MOOC 笔记
网站链接
- 基础夯实:基础数据结构与算法(二)
基础夯实:基础数据结构与算法(二) 常见的10种算法 1.递归算法 例题1:计算n! 例题2:斐波那契数列 例题3:递归将整形数字转换为字符串 例题4:汉诺塔 例题5:猴子吃桃 例题6:N皇后问题 2 ...
- 计算机会考程序设计循环语句知识点,算法与程序设计会考复习知识点
<算法与程序设计会考复习知识点>由会员分享,可在线阅读,更多相关<算法与程序设计会考复习知识点(19页珍藏版)>请在人人文库网上搜索. 1.信息技术会考复习(算法与程序设计)1 ...
- 新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?
搬运工,看到一篇关于算法学习之路的总结,希望对你有帮助. 原文链接:zh.lucida.me/blog/on-le 我的算法学习之路 MAY 4TH, 2014 | COMMENTS 关于 严格来说 ...
- 数据结构和算法_零基础入门01
数据结构和算法_零基础入门01 一.数据结构是什么? 逻辑结构.物理结构 二.算法 算法的五个基本特征 算法设计的要求 b站学习小甲鱼的数据结构与算法,自留笔记. 程序设计=数据结构+算法 一.数据结 ...
- asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)
数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...
- 机器学习中的算法-支持向量机(SVM)基础
机器学习中的算法-支持向量机(SVM)基础 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处 ...
- 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...
- 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础
---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...
- 【基础算法Ⅰ】算法入门篇
目录 进入算法世界 1.输入输出 1.1输入输出 1.2快读 2.位运算 2.1运算符 2.2位运算 3.枚举 3.1枚举的引入 3.2枚举的简单理解 3.3枚举简介 3.4 枚举算法实例 算法复杂度 ...
最新文章
- 不占用多余空间实现值的交换——异或运算
- hdu 1879 继续畅通工程
- 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
- 路由网址这是mvc时代系列之三:网络路由与ASP.NET MVC生命周期(上)路由网址
- C++实现平衡二叉树
- 【REST】REST和JAX-RS相关知识介绍
- PHP 中 9 大缓存技术总结
- 大数据综合能力测试_如何完成大数据测试?资深测试从功能测试角度为你分析分析...
- C++自动类型推导 : auto 与 decltype 用法
- Problem(三):工作中的记录。。。。
- docker-compose 学习:通过 Dockerfile 和 build 指令搭建 LNMP
- 二叉树最小结构(C++版本)
- CSS里 @import用法
- 桌面小工具天气连接不到服务器,为什么Windows 7的系统里的天气小工具显示没法连接到服务?...
- Qt实现 QQ好友列表QToolBox
- 1980-2018年中国及世界各国实际利率数据
- 零基础怎样制作自己的网页网站具体流程 - WordPress建站
- 【历史上的今天】5 月 23 日:Java 正式发布;晶体管的共同发明者出生
- 计算机学校属于什么学历,技校毕业是什么学历 技校属于什么文凭
- Oracle总结【视图、索引、事务、用户权限、批量操作】
热门文章
- px30 lan8720移植
- Python 简单数据/密码加密方法
- java hppt ClientProtocolException invalid http response
- 前端禁用网页复制和选中(普通网页和vue)
- ApiSix基础入门:协议解析-样例详解
- (45.3)【API接口漏洞专题】API接口原理、请求方法、类型、安全校验方法
- 教学管理系统——利用java和mysql来实现
- 什么时候会出现user_objects的invalid_夫妻之间出现这些情况,十有八九是缘分已尽了,别不在意...
- CentOS7下系统一键安装后报502 Bad Gateway
- SEO没有未来了?浅谈SEO的职业规划道路!