对原本的prime算法进行了改进,原本的算法好像只能输入生成的最小生成树的路径长度(权值和),为了满足题目要求,新建了一个结构体用来存储寻找最短距离过程中更新过的最短距离,并在树的生成过程中保存结构体数组中的数据。(方法不太巧妙,但总算是满足了要求)详细过程已注释。
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct link
{
int sta,stop,weight;
}bian[1000];
struct link2
{
int u,weight;
}bian2[1000];
link li[100];
const int maxv=1000;
const int INF=10000000;
int n,m,G[maxv][maxv];
int d[maxv];
bool vis[maxv]={false};
int num=0;
int prime(int &num)//&引用,在函数内改变全局变量的值
{
fill(d,d+maxv,INF);
d[0]=0;//初始化0为出发点(任意)
int ans=0;
for(int i=0;i<n;i++)
{
int u=-1,min=INF;
for(int j=0;j<n;j++)
{
if(vis[j]==false&&d[j]<min){
u=j;
min=d[j];
}