当前位置: 首页 > news >正文

北京建设部幼儿园网站网站注册页面

北京建设部幼儿园网站,网站注册页面,WordPress博客Vieu主题破解,渭南做网站哪家公司目录题目代码(Flood Fill)代码(并查集)题目 题目链接 找出房间个数——>求连通块个数 最大房间——>求最大连通块 直接用flood fill算法 注意题目的输入,例如118211182111821,则代表有西、北、南墙…

目录

  • 题目
  • 代码(Flood Fill)
  • 代码(并查集)

题目

在这里插入图片描述
题目链接

找出房间个数——>求连通块个数
最大房间——>求最大连通块

直接用flood fill算法

注意题目的输入,例如11=8+2+111=8+2+111=8+2+1,则代表有西、北、南墙
在这里插入图片描述

代码(Flood Fill)

上下左右的走向可以预先设置数组dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};
墙的表示相当于二进制编码,可以用位运算获取特定位的数值(p[t.x][t.y] >> i & 1

#include <iostream>
#define x first
#define y second
using namespace std;int n, m;
int p[55][55];
bool st[55][55];
typedef pair<int, int> PII;
PII q[2505];int bfs(int i, int j) {int hh = 0, tt = 0;int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};q[0] = {i, j};st[i][j] = true;while(hh <= tt) {PII t = q[hh ++ ];for (int i = 0; i < 4; i ++ ) {int tx = t.x + dx[i], ty = t.y + dy[i];if (tx < 0 || tx >= m || ty < 0 || ty >= n) continue; // 越界 if (st[tx][ty]) continue;	// 已经走过 if ((p[t.x][t.y] >> i) & 1) continue;	// 是墙 q[ ++ tt ] = {tx, ty};	// 入队 st[tx][ty] = true;}}return tt + 1;	// 队列同时有的元素个数,就是连通块大小 
}int main () {scanf("%d%d", &m, &n);for (int i = 0; i < m; i ++ ) {for (int j = 0; j < n; j ++ ) {scanf("%d", &p[i][j]);} }int max_s = 0, cnt = 0;for (int i = 0; i < m; i ++ ) {for (int j = 0; j < n; j ++ ) {if (st[i][j]) continue;max_s = max(max_s, bfs(i, j));cnt ++;} }printf("%d\n%d\n", cnt, max_s);return 0;
}

代码(并查集)

将房间连通也可用并查集,枚举每个房间和两个方向(东、南;西、北;西、南;东、北皆可),如果没墙则连通,集合总数-1,集合元素个数相加。
注意集合元素个数初始都是1,ares初始也为1,因为连通块最小也有1个房间

#include <iostream>
using namespace std;int m, n;
int g[55][55];
const int dx[2] = {1, 0}, dy[2] = {0, 1};	// 向南、向东 
const int dw[2] = {8, 4};	// 南墙、东墙int p[2505], np[2505];
int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
} 
int main() {scanf("%d%d", &m, &n);for (int i = 0; i < m; i ++ ) {for (int j = 0; j < n; j ++ ) {scanf("%d", &g[i][j]);}}for (int i = 0; i < m * n; i ++ ) p[i] = i, np[i] = 1;int cnt = m * n, ares = 1;for (int i = 0; i < m; i ++ ) {for (int j = 0; j < n; j ++ ) {for (int k = 0; k < 2; k ++ ) {int tx = i + dx[k], ty = j + dy[k];if (tx >= m || ty >= n) continue; if (g[i][j] & dw[k]) continue;	// 是墙 int a = find(i * n + j), b = find(tx * n + ty);	// 找到{i,j}和{tx,ty}的祖先 if (a != b) {p[a] = b;	// a合并到b cnt -- ;	// 集合总数-1 np[b] += np[a];	// a元素加到b ares = max(ares, np[b]);}}}}printf("%d\n%d\n", cnt, ares);return 0;
} 
http://www.shuangfujiaoyu.com/news/20384.html

相关文章:

  • 服务器有了网站怎么做班级优化大师官网登录
  • 淮南市建设委员会网站发帖效果好的网站
  • 做家具有那个网站品牌维护
  • 系统的php网站建设关键词歌词图片
  • 阿里云虚拟主机可以做几个网站百度上如何发广告
  • 重庆手机网站方案设计网络优化行业的发展前景
  • 用zend做饿了么网站企业策划推广公司
  • 做区块链好的网站windows优化大师会员兑换码
  • 做网页收集素材常用的网站有哪些最近有新病毒出现吗
  • 个人做网站 优帮云成都最新热门事件
  • 做视频网站流量费高吗外包公司是正规公司吗
  • 画册设计制作广东seo推广外包
  • 专门做朋友圈小视频的网站百度网页游戏中心
  • 企事业网站建设网络推广是做什么的
  • 携程网网站是哪家公司做的免费推广平台有哪些
  • 六安哪家公司做网站好著名的营销成功的案例
  • 房产证查询系统官方网站网站运营主要做什么
  • wordpress网站图片加速广州网络推广外包平台
  • 做网站需要数据库短视频seo营销
  • 自适应网站怎么做全部视频支持代表手机浏览器
  • 网站上滚动海报怎么做的站长工具高清吗
  • 网站用哪些系统做的比较好营销推广48个方法
  • 新北区城乡建设局网站市场调研报告1500字
  • 大连网站制作学校医院营销策略的具体方法
  • 北京市建设工程信息网站郑州seo技术外包
  • 嘉兴外贸网站制作免费b2b推广网站大全
  • 中企动力的网站如何qq群排名优化软件购买
  • 企业网站推广哪些效果比较好网络营销专业是干什么的
  • 优质网站建设方案旅游推广赚佣金哪个平台好
  • 学校网站 asp爱站网关键词怎么挖掘