prim最小生成树算法要点

#include<stdio.h>
#define n 6     

typedef struct{
 int fromvex,endvex;
 float length;
}edge;

 edge T[n-1];
 
 float dist[n][n]=
 {
  {10000,10,10000,10000,19,21},
  {10,10000,5,6,10000,11},
  {10000,5,10000,6,10000,10000},
  {10000,6,6,10000,18,14},
  {19,10000,10000,18,10000,33},
  {21,11,10000,14,33,10000}
 };
 
 void Prim(int i){
  int j,k,m,v;
  float min,max=10000;
  float d ;
  edge e;
  v=i;
  for(j=0;j<=n-2;++j){
   T[j].fromvex=v;
   if(j>=v){
    T[j].endvex = j+1;
    T[j].length=dist[v][j+1];
   }
   else{
    T[j].endvex=j;
    T[j].length=dist[v][j];
   }
  }
  for(k=0;k<n-1;++k){
   min=max;
   for(j=k;j<n-1;++j)
    if(T[j].length<min){
     min=T[j].length;
     m=j;
    }
  e=T[m];
  T[m]=T[k];
  T[k]=e;
  v=T[k].endvex;
  for(j=k+1;j<n-1;++j){
   d=dist[v][T[j].endvex];
   if(d<T[j].length){
    T[j].length=d;
    T[j].fromvex=v;
   }
  }
  }
 }
 
int main(){
 int i;
 Prim(2);
 for(i=0;i<n-1;++i){
  printf("%d--%.0f-->%d/n",T[i].fromvex,T[i].length,T[i].endvex);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值