九度1012畅通工程

来源:互联网 发布:node sass windows 编辑:程序博客网 时间:2024/06/08 01:31

求需要加几条边可以让图变得连通

求出连通分量个数,需要的边数即连通分量数减一

#include<stdio.h>#include<string.h>int map[1000][1000];int n,v[1000];void dfs(int k){  int i,j;  v[k]=1;  for(i=1;i<=n;i++)  if(!v[i])  {    if(map[k][i]||map[i][k])      dfs(i);   }}    int main(){  int m,i,a,b,num;  scanf("%d",&n);  while(n)  {    memset(map,0,sizeof(map));      memset(v,0,sizeof(v));     num=0;     scanf("%d",&m);    for(i=0;i<m;i++)    {      scanf("%d%d",&a,&b);      map[a][b]=map[b][a]=1;    }    for(i=1;i<=n;i++)      if(!v[i])      {        num++;        dfs(i);      }    printf("%d\n",num-1);    scanf("%d",&n);  }      return 0;}        


原创粉丝点击