题目:统计一个森林中的树和孤点个数。
分析:图论,搜索。这里利用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;
}