哎呀,最近准备着面试了,把以前会的算法都来复习一下,希望笔试的时候能顺利些呢!囧
其中map[i][j] 表示 : i 点 到j点的距离为 map[i][j]
int prim()
{
int i,pos,min,j,result = 0;
j = 0;
memset(is_visited,0,sizeof(is_visited));
//从任一点开始,分别标记和记录该点
is_visited[1] = 1;pos =1;
//第一次给low数组赋值
for(i = 1;i <= n;i ++)
if(i != pos)
low[i] = map[pos][i];
for(i = 1; i < n;i ++)
{
//找出最小权值并标记该位置
min = MaxInt;
for(j = 1; j <= n; j++)
{
if(is_visited[j]==0 && min>low[j])
{
min = low[j];
pos = j;
}
}
//最小权值累加
result += min;
//标记该点
is_visited[pos] = 1;
//再寻找点1和点pos附近的最小权值边
for(j = 1; j <= n; j++)
if(is_visited[j]==0 && low[j]>map[pos][j])
low[j] = map[pos][j];
}
return result;
}