#include<iostream> using namespace std; const int Max = 100; int p[Max][Max]; const int maxCost = 99; int lowcost[Max]; int nearest[Max]; bool mark[Max]; void Prime(int k,int n) { memset(lowcost, 99, sizeof(lowcost)); memset(nearest, -1, sizeof(nearest)); memset(mark, false, sizeof(mark)); nearest[k] = k; lowcost[k] = 0; mark[k] = true; //k is the the point you have added the set for (int i = 0; i < n; i++) { //update lowcost and nearest for (int j = 0; j < n; j++) { if (p[k][j] != 0 && !mark[j] && lowcost[j] > p[k][j]) { lowcost[j] = p[k][j]; nearest[j] = k; } } //find the min lowcost int min = maxCost; for (int j = 0; j < n; j++) { if (!mark[j] && min > lowcost[j]) { min = lowcost[j]; k = j; } } mark[k] = true; } } int main() { freopen("sample_input.txt","r",stdin); int vertex, edge; cin >> edge >> vertex; int u, v, cost; for (int i = 0; i < vertex; i++) { cin >> u >> v >> cost; p[u][v] = cost; p[v][u] = cost; } Prime(0, edge); return 0; }
时间: 2024-10-03 14:03:18