zoj1586 最小生成树prim解法

来源:互联网 发布:mac os升级不支持银联 编辑:程序博客网 时间:2024/06/11 05:02
#include <stdio.h>void my_Prim(int n);//data for Primint graph[1005][1005];int mincost[1005];int adjvex[1005];int main(void) {    int num_input = 0;    scanf("%d", &num_input);        //other data    int i = 0, j = 0;    int n = 0;    int price_qs[1005];    while(num_input--) {        scanf("%d", &n);        for (i = 0; i < n; ++i) {            scanf("%d", &price_qs[i]);        }        //init graph        for (i = 0; i < n; ++i){            mincost[i] = adjvex[i] = 0;            for (j = 0; j < n; ++j) {                scanf("%d", &graph[i][j]);                if (i != j) {                    graph[i][j] += price_qs[i] + price_qs[j];                }            }         }                my_Prim(n);    }        return 0;}void my_Prim(int n){    int sum = 0;    int i = 0, j= 0, k = 0;    for (i = 0; i < n; ++i) {       mincost[i] = graph[0][i];       adjvex[i] = 0;    }    int min = 65535;    for (i = 1; i < n; ++i) {        min = 65535;        j = 1; k = 0;        while (j < n) {            if (mincost[j] != 0 && mincost[j] < min) {                min = mincost[j];                k = j;            }            ++j;        }        sum += min;        mincost[k] = 0;        for (j = 1; j < n; ++j) {            if (mincost[j] != 0 && graph[k][j] < mincost[j]) {                mincost[j] = graph[k][j];                adjvex[j] = k;            }        }     }    printf("%d\n", sum);}