数据结构实验:连通分量个数

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

 在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,

否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。
例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量。
 

输入

 第一行是一个整数T,表示有T组测试样例(0 < T <= 50)。每个测试样例开始一行包括两个整数N,M,(0 < N <= 20,0 <= M <= 200)

分别代表N个顶点,和M条边。下面的M行,每行有两个整数u,v,顶点u和顶点v相连。

输出

 每行一个整数,连通分量个数。

示例输入

2
3 1
1 2
3 2
3 2
1 2

示例输出

2
1

算法分析:这是我从家回到学校训练 做连通分量的第一道题,虽然一开始的算法想错了,运行结果不对。

但正是在前面算法的基础上进行的修改,最后就是DFS 求路径的条数!唉,这种题以后不能马虎啦!!!

       一开始竟然是这么想的: 结果=总的点数n - 未被访问的点 + dfs路径数 ,  发现程序跑完样例的结果偏大!

       其实这么想的原因自己也知道了,因为我开始想错了,dfs如果遇到一个点的路径时也要+1,这个地方我想错了!

      以后继续多多使用dfs, 禁止此类错误的重犯!  修改完代码后,测试样例通过,提交一遍Accepted了!

注意:借助此题加深对连通分量(离散数学的知识点)的记忆和理解 ! comn on ! ! !

     代码如下:

    

#include <stdio.h>
#include <string.h>
int n, m; int map[50][50];
int vt[50];
int cnt; //记录连通分量的个数 void dfs(int u)
{
vt[u]=1; //标记该点访问
int i;
for(i=1; i<=n; i++)
{
if( !vt[i] && map[u][i]==1 )
{
vt[i]=1;
dfs(i);
}
}
} // dfs的路径数
int main()
{
int t;
int i, j, k;
int u, v;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &m);
memset(map, 0, sizeof(map));
cnt=0; //数据初始化
memset(vt, 0, sizeof(vt));
for(i=0; i<m; i++)
{
scanf("%d %d", &u, &v );
map[u][v] = 1;
map[v][u] = 1;
}
for(j=1; j<=n; j++)
{
if(!vt[j] )
{
dfs(j);
cnt++;
}
}
printf("%d\n", cnt );
}
return 0;
}
 

SDUT OJ 之 连通分量个数 (dfs)的更多相关文章

  1. SDUT 1488 数据结构实验:连通分量个数

    数据结构实验:连通分量个数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description  在无向图中,如 ...

  2. SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )

    亲和数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...

  3. SDUT OJ 2607

    /*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...

  4. CodeForces - 1243D. 0-1 MST(补图连通分量个数)

    Ujan has a lot of useless stuff in his drawers, a considerable part of which are his math notebooks: ...

  5. SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

    图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...

  6. PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs

    统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...

  7. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

    从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...

  8. 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项

    传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...

  9. 华为OJ:素数对个数

    素数对个数 题目描述若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5.6和13,它们能应用于通信加密.现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“ ...

随机推荐

  1. 查看网络port占用

    Linux和Mac下通用: 1.  利用 netstat 查看网络状态命令: netstat -an|grep port号 2. 利用list open file 命令打开文件(一切都是文件. 包含网 ...

  2. 通过run configuration启动项目

    系统通过配置加载路径是通过classpath加载绝对路径 设置属性选中某个项目,然后在工具栏中选择"Run-->Run Confgurations“,然后在对话框的右边选择" ...

  3. gray-code——找规律

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  4. Android---63---Android中的动画效果

    Android中有四种动画效果: AlphaAnimation:透明度动画效果 ScaleAnimation:缩放动画效果 TranslateAnimation:位移动画效果 RotateAnimat ...

  5. Lua学习二----------Lua的基本语法

    © 版权声明:本文为博主原创文章,转载请注明出处 Lua基本语法: 1.--表示单行注释 2.--[[--]]表示多行注释 3.Lua区分大小写 4.Lua中变量默认是全局变量,除非用local显式声 ...

  6. ASP.NET机制详细的管道事件流程(转)

    ASP.NET机制详细的管道事件流程 第一:浏览器向服务器发送请求. 1)浏览器向iis服务器发送请求网址的域名,根据http协议封装成请求报文,通过dns解析请求的ip地址,接着通过socket与i ...

  7. smokeping插件使用及说明

    smokeping七大组件:general(普通设置) .alerts(警报设置).Datebase(数据库参数).presentation(网络自定义).slaves(从smokeping定义).t ...

  8. JSP——Web应用

      1.EL表达式   2.jstl fmt功能说明     3.jsp 自定义标签     4.QR码————二维码等条码

  9. 【虚拟机】WIN8.1系统安装虚拟机win7环境

    一.虚拟机的安装 1.准备 VMware Workstation 的软硬件支持,请查看 http://www.vmware.com/cn/products/workstation.html#techs ...

  10. CentOS7时间设置及ntp同步配置(转)

    出处:http://www.centoscn.com/CentOS/config/2015/1105/6385.html http://www.centoscn.com/CentOS/config/2 ...