void prim(int g[N][], int n)
{
int isSelected[N];
int cost[N];
int prevex[N];
int edge[N][2];
int lowestCost;
int vex;
// 初始化
for (int i = 0; i < n; ++i)
{
isSelected[i] = 0;
cost[i] = g[0][i];
prevex[i] = 0;
}
isSelected[0] = 1;
for (int i = 1; i < n; ++i) // 将n-1个点加入树中
{
lowestCost = INFINITE;
for (j = 1; j < n; ++j)
{
if (cost[j] < lowestCost && isSelected[j] == 0)
{
vex = j;
lowestCost = cost[j];
}
}
isSelected[vex] = 1;
edge[i][0] = prevex[vex];
edge[i][1] = vex;
// 刷新cost[]
for (j = 1; j < n; ++j)
{
for (k = 0; k < n; ++k)
{
if (isSelected[j] == 0 && isSelected[k] == 1 && cost[j] > g[j][k])
{
cost[j] = g[j][k];
prevex[j] = k;
}
}
}
}
}原文:http://blog.csdn.net/jarelzhou/article/details/18605191