zoj1586 最小生成树prim解法

xiaoxiao2021-02-28  84

#include <stdio.h> void my_Prim(int n); //data for Prim int 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); }

 

转载请注明原文地址: https://www.6miu.com/read-81879.html

最新回复(0)