关于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的更多相关文章

  1. 和小哥哥一起刷洛谷(4) 图论之广度优先搜索BFS

    关于bfs: 你怎么会连这个都不知道!!!自己好好谷歌一下!!!(其实我也刚学) bfs伪代码: while(队列非空){ 取出队首元素u; 弹出队首元素; u染色为黑色; for(int i=0;i ...

  2. 和小哥哥一起刷洛谷(8) 图论之Floyd“算法”

    关于floyd floyd是一种可以计算图中所有端点之间的最短的"算法",其伪代码如下: for(所有起点i) for(所有终点j) 如果i=j: i到j最短路设为0 如果i与j相 ...

  3. 和小哥哥一起刷洛谷(7) 图论之dijkistra算法

    关于dijkstra 维基百科 戴克斯特拉算法(英语:Dijkstra's algorithm,又译迪杰斯特拉算法)由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年提出.戴克斯特拉算法使用了广度优先 ...

  4. 和小哥哥一起刷洛谷(6) 图论之SPFA算法

    关于\(spfa\) spfa伪代码: void spfa(s){ 最短路数组全部设为无限大; 队列 q; 起点s入队; s离s的距离设为零; while(队列非空){ 取出队首;弹出队首; for( ...

  5. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  6. P4554 小明的游戏 (洛谷) 双端队列BFS

    最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...

  7. 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)

    洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...

  8. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  9. 洛谷 P1219 八皇后【经典DFS,温习搜索】

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

随机推荐

  1. 【hbase】hbase的shell操作笔记

    HBase Shell $ ./bin/hbase shell # 进入交互界面 DDL操作: create:创建表(默认命名空间为default) # create '表名','列族1','列族2' ...

  2. Docker -compose install Harbor

    Docker-compose Harbor install Docker install Yum install docker-compose 首先安装 yum configuation 管理工具 [ ...

  3. c# 字符串修改

  4. python之编码与解码、is 与==的区别

    一.编码与解码 编码的过程其实就是采用一定的编码格式将unicode字符转换成str字符的过程 非ASCII码字符按字节为单位被编码成十六进制转义字符 解码采用的编码格式跟设置和环境有关 ascii ...

  5. Apache 安装后Error 403的故障排错方法(linux)

    Apache 安装后Error 403的故障排错方法 2018年01月07日 14:25:41 个人分类: Linux 一.问题描述 在apache2的httpd配置中,很多情况都会出现403. 刚安 ...

  6. Nginx网站用户认证

    一.Nginx网站用户认证 用户认证:用户访问网页时需要输入一个用户名和密码才能打开网页. nginx的默认网页时安装目录下的html/index.html,配置文件在安装目录下的conf目录中的ng ...

  7. AspNetCore架构图

    asp,net,core  All-in-One App All-in-One applications N-Layer 典型的应用层 分层项目骨架 Clean Architecture Layers ...

  8. Java中创建线程主要有三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  9. pandas速查手册(中文版)

    本文翻译自文章:Pandas Cheat Sheet - Python for Data Science 对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它 ...

  10. URL路径详解

    1.url http://localhost:8080/Test/1.html url表示浏览器访问服务器的网络路径   http:相当于人们交流时候的语言   :// 分隔符   localhost ...