九度教程第66题
C语言源码:
[cpp]
#include<stdio.h>
int a[1000][1000];
void dfs(int k,int visited[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[k][i]!=0&&visited[i]==0)
{
visited[i]=1;
dfs(i,visited,n);
}
}
}
int main()
{
int n,m,i,j,k,l,num,visited[1000];
scanf("%d",&n);
while(n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&k,&l);
a[k-1][l-1]=1;
a[l-1][k-1]=1;
}
for(i=0;i<n;i++)
visited[i]=0;
num=0;
for(i=0;i<n;i++)
{
if(visited[i]==0)
{
dfs(i,visited,n);
num++;
}
}
printf("%d\n",num-1);
scanf("%d",&n);
}
}
补充:软件开发 , C++ ,