POJ 1258 Prim算法

第一次學習最小生成樹算法,用POJ上題練習,遇到挺大問題,代碼基本照着別人模版改的。

思路還算可以,實現困難挺大,看來敲代碼太少了。以後繼續努力。

原作者:http://blog.csdn.net/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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章