大致思路:
给出两个城市之间是有路的,问最少需要修多少路使所有城市连通
大致思路:
简单并查集
c++:
#include<cstdio>
const int MAXN=1000+50;
int road[MAXN];
int find(int x){
return x==road[x]?x:road[x]=find(road[x]);
}
void unite(int a,int b){
road[a]=b;
}
int main(){
int m,n;
while(scanf("%d",&n)!=EOF){
if(n==0)
break;
for(int i=1;i<=n;i++)
road[i]=i;
scanf("%d",&m);
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
a=find(a),b=find(b);
unite(a,b);
}
int cnt=0;
for(int i=1;i<=n;i++)
if(road[i]==i)
cnt++;
printf("%d\n",cnt-1);
//cnt为许多城市构成回路的数量,两个回路之间只需要一条路即可连通
}
return 0;
}

本文介绍了一个使用并查集算法解决城市间道路连接问题的C++实现案例。通过输入城市之间的道路连接情况,算法能够计算出使所有城市相互连通所需的最少新增道路数量。
11万+

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



