最小支撑树之prim算法

无向图的最小支撑树算法:prim算法。

#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAXVEX 20
#define INFINY 65536
struct graph{
 int numberV,numberE;
 int V[MAXVEX];    //图的顶点
 int E[MAXVEX][MAXVEX];  //图的边的权重
};
//图的创建
void createGraph(graph *G)
{
 G->numberV=5;
 G->numberE=7;
 for(int i=0;i<G->numberV;i++)
   G->V[i]=i;
 for(int i=0;i<G->numberV;i++)    //对图进行初始化
  for(int j=0;j<G->numberV;j++)
  {
   if(i==j)
    G->E[i][j]=0;
   else
      G->E[i][j]=INFINY;
  }
  G->E[0][1]=10;
  G->E[0][2]=20;
  G->E[0][3]=3;
  G->E[1][2]=5;
  G->E[1][3]=2;
  G->E[2][4]=11;
  G->E[3][4]=15;
 for(int i=0;i<G->numberV;i++)
  for(int j=i;j<G->numberV;j++)
   G->E[j][i]=G->E[i][j]; 
}
void minTree(graph *G)
{
 int adjV[MAXVEX];    //存放处理顶点的下标
 int lowcost[MAXVEX];  //存放最小的权值
 adjV[0]=0;
 lowcost[0]=0;
 for(int i=1;i<G->numberV;i++)
 {
  lowcost[i]=G->E[0][i];
  adjV[i]=0;
 }
 for(int i=0;i<G->numberV;i++)
 {
  int min=INFINY;
  int k=0;
  for(int j=1;j<G->numberV;j++)
  {
   if(lowcost[j]!=0&&min>lowcost[j])
   {
    min=lowcost[j];
    k=j;
   }
  }
  lowcost[k]=0;
  if(adjV[k]!=k)
      printf("%d-%d  ",adjV[k],k);
  for(int j=1;j<G->numberV;j++)
  {
   if(lowcost[j]!=0&&G->E[k][j]<lowcost[j])
   {
    lowcost[j]=G->E[k][j];
    adjV[j]=k;
   }
  }
 }
 printf("\n");

}
int main(int argc,char**agrv)
{
 graph m;
 createGraph(&m);
 minTree(&m);
 return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值