prim算法模板

来源:互联网 发布:动画建模软件 编辑:程序博客网 时间:2024/06/06 10:13

下面是最小生成树prim算法的模板,个人觉得需要注意的是,dis初始化的时候,要初始化为很大的值。

int prim()//复杂度O(N^2){int result = 0;int minCost;int i,j,k;lowCost[0] = -1;//从结点0开始for(i = 1; i< n; i++)lowCost[i] = graph[0][i];for(i = 1; i < n; i++)//找n-1条边{minCost = MAX;for(j = 1; j < n; j++)//找两个不想交集合的最小边{if(lowCost[j]>0 && lowCost[j]<minCost){minCost = lowCost[j];k = j;}}lowCost[k] = -1;//找到,标记result += minCost;for(j = 1; j < n; j++)//加入这个结点后,更新两个集合的边。{if(graph[k][j] < lowCost[j])lowCost[j] = graph[k][j];}}return result;}


 

void prim(){    int i, j, now, min_node, min_edge;    for(i = 1; i <= n; i ++)        dis[i] = inf;    now = 1;    ans = 0;    for(i = 1; i < n; i ++){        dis[now] = -1;        min_edge = inf;        for(j = 1; j <= n; j ++)            if(now != j && dis[j] >= 0){                dis[j] = min(dis[j], map[now][j]);                if(dis[j] < min_edge){                    min_edge = dis[j];                    min_node = j;                }            }now = min_node;ans += min_edge;    }}