/*
Prim算法的时间复杂度为O(N2),如果借助堆,每次选边的时间复杂度是O(logM),
然后用邻接表来存储图的话,整个时间复杂度会降到O(MlogN)
*/
#include "stdio.h"
int dis[7],book[7] = {0};//book数组用来记录哪些顶点已经放入生成树中
int h[7],pos[7],size;//h用来保存堆,pos用来存储每一个顶点在堆中的位置,size为堆的大小
//交换函数,用来交换堆中的两个元素的值
void swap(int x,int y)
{
int t;
t = h[x];
h[x] = h[y];
h[y] = t;
//同步更新pos
t = pos[h[x]];
pos[h[x]] = pos[h[y]];
pos[h[y]] = t;
return;
}
//向下调整函数
void siftdown(int i)//传入一个需要向下调整的节点编号
{
int t,flag = 0;//flag用来标记是否需要向下调整
while(i * 2 <= size && flag == 0)
{
//比较i和它左儿子i*2在dis中的值,并用t记录值较小的节点编号
if(dis[h[i]] > dis[h[i * 2]])
{
t = i * 2;
}