您的位置:首页 > 编程语言

畅通工程算法及代码

2014-05-08 10:50 239 查看
如果一条路都没有,总共要修的路为n-1,每输入一条路就与之前输入的路比较,若没有构成环,则要修的路减少一条,知道所有已经修好的路输完为止.

#include<stdio.h>

int f[1000],k,n,m;

int father(int x){

int r=x;

while(r!=f[r])//算出所有点的根结点,当且仅当父接点与该点相同时,该点为根结点.

r=f[r];

return r;

}

void g(int a,int b){

int fa,fb;

fa=father(a);

fb=father(b);

if(fa!=fb){//若同一条线上两个点根结点不相同时,说明两个点没有构成环,把其中一点设为另一点的父结

f[fa]=fb;//点,要修的路条数减1;

k--;

}

}

int main(){

int i,p,q;

scanf("%d",&n);

while(n!=0){

k=n-1;

scanf("%d",&m);

for(i=1;i<=n;i++)

f[i]=i;//开始时设所有点的父结点都为他本身.

for(i=0;i<m;i++){

scanf("%d",&p);

scanf("%d",&q);

g(p,q);

}

printf("%d\n",k);

scanf("%d",&n);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: