#define INFINITY 2020;
typedef struct closedge //保存链接边的辅助的类型
{
int adjvex;
int lowcost; /*✿✿✿✿生成树到adjvex的距离为lowcost✿✿✿✿,当值为0时表示已经归并到了树中*/
} closedge;
int Prime()//图的最小生成树算法
{
int arr[8][8] = {{2020, 8, 2020, 4, 2020},
{8, 2020, 7, 5, 12},
{2020, 7, 2020, 11, 6},
{4, 5, 11, 2020, 3},
{2020, 12, 6, 3, 2020},
} ;
int u=1;/*从❤第二个❤顶点开始构造图的最小生成树*/
closedge closedge[5];
int j,k,v,min;
for(j=0;j<5;j++)/*生成树与其他节点的最小距离数组初始化,其中5是顶点的个数*/
{ closedge[j].adjvex=u;
closedge[j].lowcost=arr[u][j];/*初始化arr[1][j]*//*初始化({8, 2020, 7, 5, 12},)*/
}
closedge[u].lowcost=0;/*初始点,并入最小生成树*/
printf("%d->",u);
for(j=0;j<5-1;j++)/*5是顶点的个数,只需再运行四次,取四次树与节点的最小值,并入其他的四个点*/
{
min=2020;
for(v=0;v<5;v++)/*关键:寻找最短的点*/
if(closedge[v].lowcost!=0 && closedge[v].lowcost<min)/*如果v点没有并入树,寻找距离最短的k点*/
{
min=closedge[v].lowcost; k=v;
}
closedge[k].lowcost=0;/*将顶点k并入U中*/
printf("%d->",k);
/*❤ k并入后,更新最短距离,修改closedge【n】中的各个元素的值 ❤ */
for(v=0;v<5;v++)
if(arr[v][k]<closedge[v].lowcost)
{
closedge[v].lowcost=arr[v][k];
closedge[v].adjvex=k;
}
}
printf("prime算法执行结束,以上为选择到当前树最近的顶点的序列\n");
return 0;
}
int main()
{
Prime();printf("按任意键继续");int aaahhh=0;scanf("%d",&aaahhh); //防止运行完一闪而过return 0;
}
#include<stdio.h>/*更详细的注释版*/
#include<string.h>
#include<stdlib.h>
#define INFINITY 2020;
typedef struct closedge //保存链接边的辅助的类型
{
int adjvex;
int lowcost; /*✿✿✿✿生成树到adjvex的距离为lowcost✿✿✿✿,当值为0时表示已经归并到了树中*/
} closedge;
/*当不需要保存邻接边时,如只计算最小代价,可仅使用数组 int lowcost[];*//*也有算法多用了一个vset[]保存是否并入生成树,实际上用lowcost[]==0也能进行判断*/
int Prime()//图的最小生成树算法
{
int arr[8][8] = {{2020, 8, 2020, 4, 2020},
{8, 2020, 7, 5, 12},
{2020, 7, 2020, 11, 6},
{4, 5, 11, 2020, 3},
{2020, 12, 6, 3, 2020},
} ;
int u=1;/*从❤第二个❤顶点开始构造图的最小生成树*/
closedge closedge[5];
int j,k,v,min;
for(j=0;j<5;j++)/*5是顶点的个数,生成树与其他节点的最小距离数组初始化*/
{ closedge[j].adjvex=u;
closedge[j].lowcost=arr[u][j];/*初始化arr[1][j]*//*初始化({8, 2020, 7, 5, 12},)*/
}
closedge[u].lowcost=0;/*初始点,并入最小生成树*/
printf("%d",u);
for(j=0;j<5-1;j++)/*5是顶点的个数,只需再运行四次,取四次树与节点的最小值,并入其他的四个点*/
{
min=2020;
for(v=0;v<5;v++)
if(closedge[v].lowcost!=0 && closedge[v].lowcost<min)/*如果v点没有并入树,寻找距离最短的k点*/
{
min=closedge[v].lowcost; k=v;
}
closedge[k].lowcost=0;/*将顶点k并入U中*/
printf("%d",k);
/*❤ k并入后,更新最短距离,修改closedge【n】中的各个元素的值 ❤ */
for(v=0;v<5;v++)
if(arr[v][k]<closedge[v].lowcost)
{
closedge[v].lowcost=arr[v][k];
closedge[v].adjvex=k;
}
}
printf("prime算法执行结束");
return 0;
}
int main()
{
Prime();printf("*******"); int aaahhh=0;scanf("%d",&aaahhh); /*防止运行完一闪而过*/return 0;
}
运行结果:
菜鸟教程在线编辑器