7-13 军事单位光缆铺设-kruskal算法
在多个军事单位之间铺设通信光缆,请编写程序保证各单位间均可通信的情况下使工程总耗费最低,计算总费用。
·
在多个军事单位之间铺设通信光缆,请编写程序保证各单位间均可通信的情况下使工程总耗费最低,计算总费用。
输入格式:
输入的第一行给出军事单位数目N (1≤N≤20)和拟铺设的通信光缆数M
接下来的M行对应各个军事单位间铺设通信光缆的成本,每行给出3个正整数,分别是两个军事单位的编号(从1编号到N),此两单位间铺设光缆的成本。
输出格式:
输出需铺设的光缆,按kruskal算法得到的顺序,输出每条光缆,每行输出一条光缆,形式如:光缆1编号,光缆2编号,费用。(编号小的放前面,编号大的放后面,逗号为英文状态下的逗号)。
输入样例:
4 6
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
输出样例:
在这里给出相应的输出。例如:
1,2,1
1,4,1
2,3,3
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Edge{
int x,y,weight;
}edge[21];
bool compare(Edge a, Edge b) {
return a.weight < b.weight;
}
int findroot(vector<int>& parent,int v)
{
int t=v;
while(parent[t]>-1)
{
t=parent[t];
}
return t;
}
void kruskal()
{
int num=0,vex1,vex2;
vector<int> parent(n+1,-1);
sort(edge,edge+m,compare);
for(int i=0;num<n-1;i++)
{
vex1=findroot(parent,edge[i].x);
vex2=findroot(parent,edge[i].y);
if(vex1!=vex2)
{
cout<<edge[i].x<<","<<edge[i].y<<","<<edge[i].weight<<endl;
parent[vex2]=vex1;
num++;
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>edge[i].x>>edge[i].y>>edge[i].weight;
}
kruskal();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)