第一次学习最小生成树算法,用POJ上题练习,遇到挺大问题,代码基本照着别人模版改的。
思路还算可以,实现困难挺大,看来敲代码太少了。以后继续努力。
原作者:http://blog.youkuaiyun.com/jiangyi711/article/details/5923627
#include <cstdio>
#define MAXN 1001
#define INF 0x7fffffff
int map[MAXN][MAXN];
int Prim(int N)
{
int i, j, min = INF, lowcost[MAXN], ret = 0, v;
for (i = 0; i < N; i++)
lowcost[i] = map[0][i];
for (i = 1; i < N; i++)
{
min = INF;
for (j = 1; j < N; j++)
if (lowcost[j] < min && lowcost[j] != 0)
{
min = lowcost[j];
v = j;
}
ret += min;
printf("%d ", ret);
lowcost[v] = 0;
for (j = 1; j < N; j++)
if (map[v][j] < lowcost[j] && lowcost[j] != 0)
{
lowcost[j] = map[v][j];
}
}
return ret;
}
int main()
{
int N;
while (scanf("%d", &N) != EOF)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
scanf("%d", &map[i][j]);
printf("%d\n", Prim(N));
}
return 0;
}