畅通工程(DFS求连通块)
2016-05-25 19:23
260 查看
要求最少多少个点才能连所有边
思路:如果1与2相连,就把1和2看成一个点,即所有连通的点整体看成一个点;
那么连通n个点至少需要n-1条边
思路:如果1与2相连,就把1和2看成一个点,即所有连通的点整体看成一个点;
那么连通n个点至少需要n-1条边
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=1000+5; int G[maxn][maxn]; int vis[maxn],N,E,cnt; int dfs(int u) { vis[u]=1; for(int v=1;v<=N;v++) if(!vis[v]&&G[u][v]) dfs(v); } int main() { while(scanf("%d",&N)==1&&N) { scanf("%d",&E); memset(vis,0,sizeof(vis)); memset(G,0,sizeof(G)); int cnt=0; for(int i=0;i<E;i++) { int u,v; cin>>u>>v; G[u][v]=G[v][u]=1; } for(int i=1;i<=N;i++) if(!vis[i]) dfs(i),cnt++; cout<<cnt-1<<endl; } return 0; }
相关文章推荐
- 第12周项目2:Time类中的运算符重载
- NKOI 3686 最大子段和
- DOMNodeInserted监听div内容改变
- ios 浅析录音技术(后台、互斥、上传)
- 实现动态更新ProgressBar的水平进度条
- 思念忙闲总诗解(2006.6.21)
- 一图看懂layout_gravity和gravity的区别
- 通讯录——动态版
- Android Handler个人见解
- 面试题:一个数组插入另一个数组指定的位置
- 分布式session
- ABBYY FineReader 12 软件推荐(图片文字识别)
- 常用快捷键—Webstorm入门指南
- gradle和gradle plugin对应表
- linux使用ipvsadm实现LVS
- Ubuntu Android 开发(三) 使用SDK更新SDK 镜像
- hihocoder 1057 : Performance Log
- 正则表达式 U贪婪模式
- photoshop 常用快捷键
- mongodb 分组查询