标签:des style blog color 使用 io strong for 数据
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; }
标签:des style blog color 使用 io strong for 数据
原文地址:http://www.cnblogs.com/yspworld/p/3937588.html