#include <iostream>
using namespace std;
#define MAXVALUE 100000
//以1节点作为缺省开始搜索的节点
void prim(int** graph, int vertices, int startPoint = 1) {
int minEdge = MAXVALUE, foundV = 1;
int length = vertices;
bool* visited = new bool[length];
for (int i = 0; i < length; i++)
{
if (startPoint - 1 != i)
visited[i] = false;
}
visited[startPoint - 1] = true;
while (foundV != length) {
minEdge = MAXVALUE;
int edge_a = -1, edge_b = -1;
for (int i = 0; i < length; i++)
{
if (visited[i] == true) {
for (int j = 0; j < length; j++)
{
int temp = graph[i][j];
//graph 中以0作为边不存在的标识
if (visited[j] == false && temp != 0 && temp < minEdge) {
minEdge = temp;
edge_a = i;
edge_b = j;
}
}
}
}
visited[edge_b] = true;
foundV++;
cout << edge_a + 1 << "->" << edge_b + 1 << ':' << minEdge << endl;
}
}
最小生成树--PRIM
最新推荐文章于 2023-02-10 08:00:00 发布