Kruskal-最小生成数

Kruskal-最小生成数

Kruskal算法

getf是找祖宗的函数。这里edge用的是结构体,我数组也做过,但是代码有点乱,不采用。代码如下:

#include<iostream>
#include<algorithm> 
using namespace std;
int f[1000];
int tot=0;
int k=0;
struct node
{<!-- -->
 int st;
 int en;
 int di;
}edge[1000];
bool cmp(node x,node y)
{<!-- -->
 return x.di<y.di;
}
int getf(int k)
{<!-- -->
 if (f[k]==k)
 {<!-- -->
  return k;
 }
 else
 {<!-- -->
  f[k]=getf(f[k]);
  return f[k];
 }
}
void unionn(int x,int y)
{<!-- -->
 f[getf(y)]=getf(x);
}
int main()
{<!-- -->
 int n,m;
 cin>>n>>m;
 for (int i=1;i<=m;i++)
 {<!-- -->
  cin>>edge[i].st>>edge[i].en>>edge[i].di;
 }
 for (int i=1;i<=n;i++)
 {<!-- -->
  f[i]=i;
 }
 sort(edge+1,edge+m+1,cmp);
 for (int i=1;i<=m;i++)
 {<!-- -->
  if (k==n-1)
  {<!-- -->
   break;
  }
  if (getf(edge[i].st)!=getf(edge[i].en))
  {<!-- -->
   unionn(edge[i].st,edge[i].en);
   tot+=edge[i].di;
   k++;
  }
 }
 cout<<tot<<endl;
 return 0;
 }

点个赞再走呗~~~o( ̄▽ ̄)ブ</em>

posted @ 2021-01-12 16:36  刘桓湚  阅读(62)  评论(0)    收藏  举报