ZOJ-1119

来源:互联网 发布:mac gdb 动态调试程序 编辑:程序博客网 时间:2024/06/05 19:14

给一个全连通图然后割顶后求剩下的连通分支个数,测试数据很水,给的图应该是连通的,然后遍历每个顶点,去掉这个顶点后做DFS求连通分支个数,如果大于1就打印分支个数,否则割顶后还是连通的。。由于偷看了测试数据,发现数据量超小。。每个点的邻接边就开了10个大小,好猥琐的感觉

#include<stdio.h>#include<string.h>static int fail, visit[1001], size[1001], adj[1001][10];static void dfs(int now){visit[now] = 1;int i;for (i = 0; i < size[now]; i++)if (!visit[adj[now][i]] && adj[now][i] != fail)dfs(adj[now][i]);}int main(){int n, m, c = 0;while (scanf("%d", &n), n){if (c)putchar('\n');printf("Network #%d\n", ++c);memset(size, 0, sizeof(size));scanf("%d", &m);adj[n][size[n]++] = m;adj[m][size[m]++] = n;while (scanf("%d", &n), n){scanf("%d", &m);adj[n][size[n]++] = m;adj[m][size[m]++] = n;}int i, j, count, flag = 1;for (i = 1; i <= 1000; i++)if (size[i]){memset(visit, 0, sizeof(visit));fail = i;count = 0;for (j = 1; j <= 1000; j++)if (j != i && size[j] && !visit[j]){count++;dfs(j);}if (count > 1){printf("  SPF node %d leaves %d subnets\n", i, count);flag = 0;}}if (flag)puts("  No SPF nodes");}return 0;}


0 0
原创粉丝点击