SDUT OJ 之 连通分量个数 (dfs)
数据结构实验:连通分量个数
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入
输出
示例输入
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)的更多相关文章
- SDUT 1488 数据结构实验:连通分量个数
数据结构实验:连通分量个数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 在无向图中,如 ...
- SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )
亲和数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...
- SDUT OJ 2607
/*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...
- CodeForces - 1243D. 0-1 MST(补图连通分量个数)
Ujan has a lot of useless stuff in his drawers, a considerable part of which are his math notebooks: ...
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...
- PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs
统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...
- 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)
从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...
- 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...
- 华为OJ:素数对个数
素数对个数 题目描述若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5.6和13,它们能应用于通信加密.现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“ ...
随机推荐
- MR之SequenceFile具体解释
package com.leaf.hadoop.second; import java.util.Random; import org.apache.hadoop.conf.Configuration ...
- npm使用指南
npm使用指南 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs npm介绍 npm全称为Node Package Man ...
- 【MVC2】发布到IIS上User.Identity.Name变成空
VS中运行时通过User.Identity.Name能取到用户名,发布到IIS上后,该值为空. 调查后发现在网站设定→[认证]中同时打开了[Windows认证]和[匿名认证], 关掉[匿名认证]后就能 ...
- Linux测网速
$ wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py$ chmod a+rx speedtest_cli. ...
- 高速掌握Lua 5.3 —— Lua与C之间的交互概览
Q:什么是Lua的虚拟栈? A:C与Lua之间通信关键内容在于一个虚拟的栈.差点儿全部的调用都是对栈上的值进行操作,全部C与Lua之间的数据交换也都通过这个栈来完毕.另外,你也能够使用栈来保存暂时变量 ...
- MySqlDataReader
本文讲述如何从SqlDataReader或MySqlDataReader中循环读取内容并输出 sqlserver和mysql的DataReader的用法完全一样,只是名字不同,以mysql为例 str ...
- Android学习笔记(36):Android的两种事件处理方式
Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...
- Oracle 中session和processes的初始设置
http://blog.163.com/succu/blog/static/193917174201252911727149/ 1.sessions 在初始化参数所设定的限制中,最为人所知的估计就 ...
- VueJS事件处理器v-on:事件修饰符&按键修饰符
事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue.js通 ...
- iReport+jasperreport创建子表的几种方式(1)
在制作报表的过程中,子表是不可缺少的.今天就研究了一下制作子表的几种方式 一.连接数据库创建子表 以MySQL为例: 我的数据源数据库中的表 watermark/2/text/aHR0cDovL2Js ...