#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++;
}
}
运行结果: