P1141 01迷宫(dfs+染色联通块)

2023-11-22 01:12
文章标签 01 dfs 染色 迷宫 联通 p1141

本文主要是介绍P1141 01迷宫(dfs+染色联通块),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 染色联通块:

一个格联通的所有格

每个对应的最大可联通格子的个数均相同

分析:

1.只需要计算每个块里的元素个数

2.元素标记对应某个块

3.查找元素时:

由        (1)元素坐标->

           (2)查找对应块的编号(visit[]查询)->

           (3)输出对应块的元素个数(item[]查询)

 代码如下:

#include<iostream>
using namespace std;int next1[5][3] = { {1,0},{-1,0},{0,1},{0,-1} };// 迷宫
char map[1009][1009] = {0};int visit[1009][1009] = { 0 };// 记录联通块记录的数量
int item[1000009] = { 0 }, k = 1;// 记录单个联通块的元素数量
int n = 1;// 矩阵的边长,查看的数量
int num = 0, check = 0;
void bfs(int x, int y);
int main()
{scanf("%d %d", &num, &check);for (int i = 0; i < num; i++){scanf("%s", map[i]);}// 如果map为0,即该点未有联通块for (int i = 0; i < num; i++){for (int j = 0; j < num; j++){if (!visit[i][j]){visit[i][j] = k; item[k] = 1;bfs(i, j);item[k] = n;k++; n = 1;}}}for (int i = 0; i < check; i++){int t1 = 0, t2 = 0;scanf("%d %d", &t1, &t2);cout << item[visit[t1 - 1][t2 - 1]] << endl;}return 0;
}
void bfs(int x, int y)
{for (int i = 0; i < 4; i++){	// 广度四个方向int tx = x + next1[i][0], ty = y + next1[i][1];// 数组溢出continueif (tx < 0 || tx >= num || ty < 0 || ty >= num) continue;// 该方向是一样,无法走continueif (map[x][y] == map[tx][ty]) continue;if (!visit[tx][ty]){// 标记坐标属于的联通块编号visit[tx][ty] = k;// 计算该联通块的元素数量n++;bfs(tx, ty);}}
}

这篇关于P1141 01迷宫(dfs+染色联通块)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406414

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

ural 1149. Sinus Dances dfs

1149. Sinus Dances Time limit: 1.0 second Memory limit: 64 MB Let  An = sin(1–sin(2+sin(3–sin(4+…sin( n))…) Let  Sn = (…( A 1+ n) A 2+ n–1) A 3+…+2) An+1 For given  N print  SN Input One

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整