DFS洛谷4961(求联通块)
说实话这个题审题把我卡了半天,还是我太菜
直接上代码吧
偷个懒用万能库。
#include"bits/stdc++.h"
using namespace std;
int mp[1010][1010];
int n,m;
int dx[8]={1,1,1,0,0,-1,-1,-1},dy[8]={-1,0,1,-1,1,-1,0,1};
int ans;
void dfs(int x,int y)
{
mp[x][y]=3;
for(int i=0;i<8;i++)
{
if(x+dx[i]>=n||x+dx[i]<0||y+dy[i]>=m||y+dy[i]<0||mp[x+dx[i]][y+dy[i]]==3||mp[x+dx[i]][y+dy[i]]==2) continue;
dfs(x+dx[i],y+dy[i]);
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++) scanf("%d",&mp[i][j]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!mp[i][j])
{
for(int k=0;k<8;k++)
{
if(i+dx[k]<0||i+dx[k]>=n||j+dy[k]<0||j+dy[k]>=m) continue;
if(mp[i+dx[k]][j+dy[k]]==1) mp[i][j]=2;
}
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mp[i][j]==2)
{
int flag=0;
for(int k=0;k<8;k++)
{
if(mp[i+dx[k]][j+dy[k]]!=0||i+dx[k]<0||i+dx[k]>=n||j+dy[k]<0||j+dy[k]>=m) continue;
flag=1;
}
if(flag==0) ans++;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mp[i][j]==0)
{
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
}
DFS洛谷4961(求联通块)的更多相关文章
- 分别利用并查集,DFS和BFS方法求联通块的数量
联通块是指给定n个点,输入a,b(1<=a,b<=n),然后将a,b连接,凡是连接在一起的所有数就是一个联通块: 题意:第一行输入n,m,分别表示有n个数,有输入m对连接点,以下将要输入m ...
- 【紫书】Oil Deposits UVA - 572 dfs求联通块
题意:给你一个地图,求联通块的数量. 题解: for(所有还未标记的‘@’点) 边dfs边在vis数组标记id,直到不能继续dfs. 输出id及可: ac代码: #define _CRT_SECURE ...
- 利用DFS求联通块个数
/*572 - Oil Deposits ---DFS求联通块个数:从每个@出发遍历它周围的@.每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否 ---已有编号,从而避免了一个格子重复访问 ...
- 洛谷1440 求m区间内的最小值
洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项 ...
- 洛谷 P1451 求细胞数量
题目链接 https://www.luogu.org/problemnew/show/P1451 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字 ...
- 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】
(是时候为五一培训准备真正的技术了qwq) part1 队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表 ...
- 洛谷 P1440 求m区间内的最小值
传送门 思路 由于数据范围很大,所以使用单调队列,和滑动窗口这道题类似 首先第一个数输出\(0\),因为第一个数之前没有数 然后通过样例我们发现,最后一个数并没有派上什么用场,所以循环\(n-1\)轮 ...
- C. Learning Languages 求联通块的个数
C. Learning Languages 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...
- HDU - 1213 dfs求联通块or并查集
思路:给定一个无向图,判断有几个联通块. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...
- 用dfs求联通块(UVa572)
一.题目 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符所在的格子相邻(横.竖.或者对角线方向),就说它们属于同一个八连块. 二.解题思路 和前面的二叉树遍历类似,图也有DF ...
随机推荐
- 活动干货|泛娱乐App出海东南亚深度解析
泛娱乐社交出海,还有哪些机会点? 为助力出海企业把握增长红利,即构科技特开设<出海"构"有料--泛娱乐出海系列直播>,从热门国家的特性洞察.玩法解决方案到技术服务经验分 ...
- zip文件结构
转starshine博客 一个zip文件由三个部分组成:压缩源文件数据区.压缩源文件目录区.压缩源文件目录结束标志 压缩源文件数据区: 50 4B 03 04:这是头文件标记(0x04034b50) ...
- 2023郑州轻工业大学校赛邀请赛wh
在这里,很感谢程立老师的帮助和选择我,我以后会跟着程老师,既然热爱,就要走下去! 2022年4月2号,我代表河南工业大学与郑州17所高校在郑州轻工业大学举办的"卓见杯"郑州轻工业大 ...
- pycharm: 注释自动生成
解决方案如下
- zanePerfor中一套简单通用的Node前后端Token登录机制和github授权登录方式
HI!,你好,我是zane,zanePerfor是一款我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序端. 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目的,现 ...
- Redis从入门到放弃(7):主从复制
1.概念 主从复制是Redis的一项重要特性,用于将一个Redis服务器(Master主节点)的数据复制到其他Redis服务器(Slave从节点),以实现数据的高可用性和读写分离.数据的复制是单向的, ...
- vscode snnipet of python
{ // Place your snippets for python here. Each snippet is defined under a snippet name and has a pre ...
- python中将时间转换为时间戳
某平台url中的时间格式为时间戳,将时间变量传入url前,需要将固定格式的时间转换为时间戳.使用python中的time模块,对时间的几种格式进行转换. strptime(),将时间字符串转换成 结构 ...
- 美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?
周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap 的问题,都是他最近面试遇到的.原提问如下: 整个提问看着非常复杂,其实归纳来说就是两个问题: ConcurrentHashMa ...
- 9k+ Star 简洁好用的开源 Linux 运维管理面板
如果你的公司需要进行服务器运维管理,那么运维管理面板就是一个不可或缺的需求.因为并非每一位运维工程师都能在命令行下游刃有余,不需要借助辅助工具就能确保服务器安全.流畅运行.尤其是对于刚刚踏入运维领域的 ...