题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=65
C语言源码:
#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语言实现的图遍历算法示例,采用深度优先搜索(DFS)来计算图中不连通部分的数量。通过输入顶点数量和边的信息,该程序能够有效地分析图的连接性。
363

被折叠的 条评论
为什么被折叠?



