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); } }