最小生成树—Prim的实现

#include<stdio.h>

#define MAXVEX 5
#define INFINITY 65535
#define LEN MAXVEX*(MAXVEX-1)/2

typedef struct{
	int start;
	int end;
	int weight;
}lowNode;

struct{
	lowNode low[LEN];
	int length;
}lowcost;

int MGraph[MAXVEX][MAXVEX]={
				0,INFINITY,6,1,3,
				INFINITY,0,4,INFINITY,2,
				6,4,0,5,INFINITY,
				1,INFINITY,5,0,INFINITY,
				3,2,INFINITY,INFINITY,0
                           };

void insert_sort(lowNode node);

int main()
{
	int a[5]={0,0,0,0,0};
	int b[5]={1,1,1,1,1};
	int visit[5]={0,0,0,0,0};
	int i,j,k;
	lowNode node;
	printf("%d \n",lowcost.length);
	b[0]=0;//move 0 to b;
	a[0]=1;
        while(a[0]+a[1]+a[2]+a[3]+a[4]!=5)
	{
           for(i=0;i<MAXVEX;i++)
	   {
		if(b[i]==0&&visit[i]==0)
		{
			visit[i]=1;
			for(j=0;j<MAXVEX;j++)
			{
				if(a[j]==0&&MGraph[i][j]!=0&&MGraph[i][j]!=INFINITY)
                                {
					node.start=i;
					node.end=j;
					node.weight=MGraph[i][j];
					insert_sort(node);	
                                }
			}
		}
		
           }
	   b[lowcost.low[lowcost.length-1].end]=0;
	   a[lowcost.low[lowcost.length-1].end]=1;
	   printf("%d -> %d\n",lowcost.low[lowcost.length-1].start,lowcost.low[lowcost.length-1].end);
	   lowcost.length--;
	}
	return 0;
}

void insert_sort(lowNode node)
{
	int i,j;
	if(lowcost.length==0)
	{
		lowcost.low[0]=node;
		lowcost.length++;
        }
	else{
		for(i=0;i<lowcost.length;i++)
		{
			if(node.weight>=lowcost.low[i].weight)
			{
				for(j=lowcost.length-1;j>=i;j--)
					lowcost.low[j+1]=lowcost.low[j];
				lowcost.low[i]=node;
				break;
			}
		}
		if(i==lowcost.length)
			lowcost.low[i]=node;
		lowcost.length++;
	}	
}


运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值