和小哥哥一起刷洛谷(5) 图论之深度优先搜索DFS
关于dfs
dfs伪代码:
void dfs(s){
for(int i=0;i<s的出度;i++){
if(used[i]为真) continue;
used[i]=1;
dfs(i);
}
return;
}
统计无向图的连通分量
显然,你在洛谷上是搜不到这题的,因为这是我们学校团队的题。所以还是找个小板凳专心听我讲吧。
题目描述:
给定无向图G(V,E),请统计G中连通分量的数量。
- 连通分量:结点V的一个子集V',保证V'中任意两点间都有路径
- 需要在主循环中进行多次dfs
输入输出格式:
输入格式:
第一行包含两个整数N、M,表示该图共有N个结点和M条无向边(N<= 5000,M<=200000);
接下来M行,每行包含2个整数{u,v},表示有一条无向边(u,v)。
输出格式:
一个整数,代表图G连通分量的数量
样例:
输入:
5 4
1 5
2 3
3 4
4 2
输出:
2
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int NR=5005;
bool color[NR];//used数组
int cnt=0,n,m;
vector<int> link[NR];
void dfs(int a){//dfs函数
int sz=link[a].size();
for(int i=0;i<sz;i++){
int nx=link[a][i];
if(color[nx]==false){
color[nx]=true;
dfs(nx);
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int st,en;
scanf("%d%d",&st,&en);
link[st].push_back(en);
link[en].push_back(st);
}
for(int i=1;i<=n;i++){//对于每个没有去过的点,将其所有可以到达的点标为true,计数加一,重复
if(color[i])continue;
color[i]=true;
dfs(i);
cnt++;
}
cout<<cnt;
return 0;
}
和小哥哥一起刷洛谷(5) 图论之深度优先搜索DFS的更多相关文章
- 和小哥哥一起刷洛谷(4) 图论之广度优先搜索BFS
关于bfs: 你怎么会连这个都不知道!!!自己好好谷歌一下!!!(其实我也刚学) bfs伪代码: while(队列非空){ 取出队首元素u; 弹出队首元素; u染色为黑色; for(int i=0;i ...
- 和小哥哥一起刷洛谷(8) 图论之Floyd“算法”
关于floyd floyd是一种可以计算图中所有端点之间的最短的"算法",其伪代码如下: for(所有起点i) for(所有终点j) 如果i=j: i到j最短路设为0 如果i与j相 ...
- 和小哥哥一起刷洛谷(7) 图论之dijkistra算法
关于dijkstra 维基百科 戴克斯特拉算法(英语:Dijkstra's algorithm,又译迪杰斯特拉算法)由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年提出.戴克斯特拉算法使用了广度优先 ...
- 和小哥哥一起刷洛谷(6) 图论之SPFA算法
关于\(spfa\) spfa伪代码: void spfa(s){ 最短路数组全部设为无限大; 队列 q; 起点s入队; s离s的距离设为零; while(队列非空){ 取出队首;弹出队首; for( ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- P4554 小明的游戏 (洛谷) 双端队列BFS
最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...
- 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)
洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...
- 洛谷 P1019 单词接龙 (DFS)
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
- 洛谷 P1219 八皇后【经典DFS,温习搜索】
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
随机推荐
- javascript原型链[图]
- python智能提取省、市、区地址
工具原文 https://github.com/DQinYuan/chinese_province_city_area_mapper 说明: https://blog.csdn.net/qq_3325 ...
- 【spark】spark-2.4.4的安装与测试
4.2.1 下载并安装spark 下载文件名:spark-2.4.4-bin-without-hadoop.tgz [hadoop@hadoop01 ~]$ tar -zxvf spark-2.4.4 ...
- docker-compose设置mysql初始化数据库的字符集
version: '3' services: mysql: image: mysql:5.7.24# volumes:# - ./mysqld.cnf:/etc/mysql/mysql.conf.d/ ...
- mysql学习之基础篇03
我们今天来进行建表的基本操作: 首先要建表就要了解列类型,因为建表就是声明列的过程,列声明完成了,表也就建好了. mysql中列分为三大类: 一.数值型 数值型又分为整型和浮点型两种. 先来看整型: ...
- SCADA系统构架的安全分析总结
概念: SCADA 数据采集与监控 Supervisory Control And Data Acquisition .包括了计算机设备 工业控制组件 网络 组成部件 ,SCADA 系统被用 ...
- python温度转换代码
#TempConvert.py TempStr=input("请输入带有符号的温度值:")#赋值TempStr,括号里面的是提示 if TempStr[-1] in ['F','f ...
- java连接Oracle数据库的操作说明
在测试中,我们常常需要连接Oracle数据库来进行查询对比.下面,我们就来看看,如何使用java代码来连接数据库,并且取出我们想要的数值. 首先,java中如果要连接Oracle数据库,需要jdbc的 ...
- minhash pyspark 源码分析——hash join table是关键
从下面分析可以看出,是先做了hash计算,然后使用hash join table来讲hash值相等的数据合并在一起.然后再使用udf计算距离,最后再filter出满足阈值的数据: 参考:https:/ ...
- linux网络编程之socket编程(三)
今天继续对socket编程进行学习,在学习之前,需要回顾一下上一篇中编写的回射客户/服务器程序(http://www.cnblogs.com/webor2006/p/3923254.html),因为今 ...