题目:判断一个无向图是否为树。
输入:
第一行为正整数n,代表图中点的个数;
接下来n行,每行有n个数据,每个数据以空格分隔,代表邻接矩阵。
输出:
若为树,输出yes;
否则,输出no。
#include<stdio.h>
#define N 100
int a[N][N];
int vis[N];
int n;
int dfs(int x)
{
if (vis[x])
return 0;
vis[x] = 1;
for (int i = x+1; i < n;i++)
if (a[x][i])
if (vis[i])
return 0;
else if (!dfs(i))
return 0;
return 1;
}
int main()
{
//freopen("1.txt", "r",stdin);
scanf("%d\n", &n);
int i, j;
for (i = 0; i<n; i++)
for (j = 0; j<n; j++)
scanf("%d", &a[i][j]);
/*for (k = 0; k<n; k++)
for (i = 0; i<n; i++)
if (a[k][i])
for (j = 0; j<n; j++)
if (a[i][k] && a[k][j]){
a[i][j] = 1;
}
for (i = 0; i<n; i++)
for (j = 0; j<n; j++)
{
if (a[i][j] + a[j][i] == 0){
printf("no\n"); return 0;
}
}
printf("yes\n");*/
int result = dfs(0);
if (result)
for (int i = 0; i < n;i++)
if (!vis[i])
result = 0;
if (result)
printf("yes\n");
else
printf("no\n");
return 0;
}