您的位置:首页 > 其它

UVa 599 - The Forrest for the Trees

2017-06-29 22:42 337 查看
题目:统计一个森林中的树和孤点个数。

分析:图论,搜索。这里利用dfs求解连通性。

            一个图,没有环称为树,很多个树叫做森林。

说明:CSDN编辑器有点问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int edge[27][27];
int node[27];

int dfs(int id)
{
node[id] = 0;
int ans = 1;
for (int i = 0; i < 26; ++ i) {
if (edge[id][i] && node[i]) {
ans += dfs(i);
}
}
return ans;
}

int main()
{
int t;
char u, v, buf[1024];
while (~scanf("%d",&t)) {
getchar();
while (t --) {
memset(edge, 0, sizeof(edge));
memset(node, 0, sizeof(node));
while (gets(buf) && buf[0] != '*') {
edge[buf[1]-'A'][buf[3]-'A'] = 1;
edge[buf[3]-'A'][buf[1]-'A'] = 1;
}
gets(buf);
for (int i = 0; buf[i]; ++ i) {
if (buf[i] >= 'A' && buf[i] <= 'Z') {
node[buf[i]-'A'] = 1;
}
}

int tree = 0, acorn = 0;
for (int i = 0; i < 26; ++ i) {
if (node[i]) {
if (dfs(i) > 1) {
tree ++;
}else {
acorn ++;
}
}
}

printf("There are %d tree(s) and %d acorn(s).\n",tree,acorn);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: