By: poj-1287
#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include < math.h> #include <stack> #include <queue>using namespace std; #define INF 10000000int N, M;int A, B, c;int map [100] [+], dis[100], v[100];int Prim (int n) {int I, j, K, min, sum = 0;for (i = 1; I <= n; i++) dis[i] = Map[1][i];memset (V, 0, sizeof (v)); v[1] = 1;dis[1] = 0;for (i = 2; I <= n; i++) {k = 1;min = Inf;for (j = 1; J <= N; j + +) if (!v[j] &&A mp Min>dis[j]) {k = J;min = Dis[j];} Sum + = Min;v[k] = 1;for (j = 1; J <= N; j + +) if (!v[j] && dis[j]>map[k][j]) dis[j] = Map[k][j];} return sum;} int main () {while (scanf ("%d%d", &n, &m)! = EOF) {if (n = = 0) break;for (int i = 1; I <= n; i++) for (int j = 1; J <= N; J + +) Map[i][j] = Inf;while (m--) {scanf ("%d%d%d", &a,&b,&c), if (Map[a][b] >= c) {map[a][b] = map[b][a] = c;}} printf ("%d\n", Prim (n));} return 0;}
Graph theory--minimum spanning tree