#include <stdio.h>
#define MAX 100
#define INF 0x3f3f3f3f
int graph[MAX][MAX];
int Prim(int graph[][MAX], int n)
{
int lowcost[MAX], mst[MAX];
int i, j, min, minid, sum = 0;
for (i = 2; i <= n; i++)
{
lowcost[i] = graph[1][i];
mst[i] = 1;
}
mst[1] = 0;
for (i = 2; i <= n; i++)
{
min = INF;
minid = 0;
for (j = 2; j <= n; j++)
if (lowcost[j] < min && lowcost[j] != 0)
{
min = lowcost[j];
minid = j;
}
printf("(%d->%d) : %d\n", mst[minid], minid, min);
sum += min;
lowcost[minid] = 0;
for (j = 2; j <= n; j++)
if (graph[minid][j] < lowcost[j])
{
lowcost[j] = graph[minid][j];
mst[j] = minid;
}
}
return sum;
}
int main()
{
freopen("input.txt", "r", stdin);
int m, n, weight;
scanf("%d %d", &m, &n);
for (int i = 1; i <= m; i++)
for (int j = 1; j <= m; j++)
graph[i][j] = INF;
for (int k = 0; k < n; k++)
{
int i, j;
scanf("%d %d %d", &i, &j, &weight);
graph[i][j] = weight;
graph[j][i] = weight;
}
printf("最短路径=%d\n", Prim(graph, m));
return 0;
}
input.txt
6 10
1 2 6
1 4 5
1 3 1
2 5 3
3 5 6
3 6 4
4 6 2
3 4 5
5 6 6
2 3 5