1.Prim算法
//Prim算法求最小生成树
#include<iostream>
#include<vector>
#define INF 0x3f3f3f3f
#define MaxVertex 1005
int G[MaxVertex][MaxVertex];
int M[MaxVertex][MaxVertex];
int parent[MaxVertex];
int dist[MaxVertex];
int Nv;
int Ne;
int sum;
using namespace std;
vector<int> MST;
//输入
void build() {
int v1, v2;
int w;
cin >> Nv >> Ne;
for (int i = 0; i < Nv; i++) {
for (int j = 0; j < Nv; j++) {
G[i][j] = 0;
M[i][j] = 0;
}
dist[i] = INF;
parent[i] = -1;
}
for (int i = 0; i < Ne; i++) {
cin >> v1 >> v2 >> w;
G[v1][v2] = w;
G[v2][v1] = w;
}
}
//Prim之前初始化,把起始点收录进最小生成树中,并更新与初始点相连的点与集合之间的距离
//即更新与初始点相连的点的dist为边的权重
void initPrim(int s) {
dist[s] = 0;
MST.push_back(s);
for (int i = 0; i < Nv; i++) {
if (G[s][i]) {
dist[i] = G[s][i];
parent[i] = s;
}
}
}
//每次