题目链接:http://poj.org/problem?id=1258
思路:题目本质就是要求最小生成树,根据题目给出的测试数据格式利用prime算法即可,代码实现如下:
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 102;
const int INF = 0xfffffff;
int graph[MAXN][MAXN], dist[MAXN];
int n, res;
void Prime() {
//init
res = 0;
for (int i = 0; i < n; i++) dist[i] = INF;
int curNode = 0;
for (int i = 1; i < n; i++) {
dist[curNode] = -1;
int minEdge = INF, minNode;
//update dist of minEdge and choose the minEdge
for (int j = 0; j < n; j++) {
if (dist[j] >= 0) {
dist[j] = min(dist[j], graph[curNode][j]);
if (dist[j] < minEdge) {
minEdge = dist[j];
minNode = j;
}
}
}
res += minEdge;
curNode = minNode;
}
}
int main() {
while ((scanf("%d", &n)) != EOF) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
Prime();
printf("%d\n", res);
}
return 0;
}