呃呃呃,供大一新生参考一哈~
#include<iostream>
#define null NULL
using namespace std;
class Graph { //采用邻接矩阵法,存储图的关系,这里仅表示图顶点的index,所以 class vnode与class enode未给出
int** matrix;
int length;
int* min_distance;
public:
Graph() { }
Graph(int num) {
length = num;
min_distance = new int[num]();
matrix = new int* [num]();
for (int i = 0; i < num; i++) {
matrix[i] = new int[num]();
}
for (int i = 0; i < length; i++) {
min_distance[i] = 99;
for (int j = 0; j < length; j++) {
if (i != j)matrix[i][j] = 99;
else matrix[i][j] = 0;
}
}
}
void add_edge(int onepoint, int twopoint,int weight) {//weight有 权值 之意
matrix[onepoint][twopoint] = weight;
matrix[twopoint][onepoint] = weight;
}
int Prim() {
int Sweigth = 0;
int vertex_index = 0;
for (int i = 0; i < length; i++) {
cout <<"加入点:"<< vertex_index << endl;
min_distance[vertex_index] = 0;//表示已经加入
int min = 99;
int temp_index = 0;
for (int j = 0; j < length; j++) {
if (min_distance[j] > matrix[vertex_index][j]) {
min_distance[j] = matrix[vertex_index][j];
}
if (min > min_distance[j] && min_distance[j] != 0) {
min = min_distance[j];
temp_index = j;
}
}
Sweigth += min_distance[temp_index];
vertex_index = temp_index;
}
return Sweigth;
}
};
int main() {
Graph* obj = new Graph(6);
obj->add_edge(0, 1, 1);
obj->add_edge(0, 4, 2);
obj->add_edge(0, 2, 5);
obj->add_edge(1, 3, 2);
obj->add_edge(2, 3, 3);
obj->add_edge(2, 4, 10);
obj->add_edge(2, 5, 1);
obj->add_edge(3, 5, 2);
obj->add_edge(4, 5, 1);
cout<<"最小生成树代价为:"<<obj->Prim();
return 0;
}