#include <stdio.h>
#define INF (1 << 31 - 1)
#define MAX 27
int numOfVillages;
int costMatrix[MAX][MAX];//used for Adjacent Matrix
int minCostArray[MAX];
int flagOfInTree[MAX];
int main(){
//freopen("input.txt", "r", stdin);
while (1){
scanf("%d", &numOfVillages);
if (numOfVillages == 0){
return 0;
}
int from, to;
for (from = 0; from < numOfVillages; from++){
for (to = from; to < numOfVillages; to++){
if (from == to){
costMatrix[from][to] = 0;
} else {
costMatrix[from][to] = INF;
costMatrix[to][from] = INF;
}
}
}
int index;
for (index = 0; index < numOfVillages - 1; index++){
char villageAlpha;
int numOfRoads;
scanf(" %c %d", &villageAlpha, &numOfRoads);
int from = villageAlpha - 'A';
int indexOfRoad;
for (indexOfRoad = 0; indexOfRoad < numOfRoads; indexOfRoad++){
int cost;
scanf(" %c %d", &villageAlpha, &cost);
int to = villageAlpha - 'A';
costMatrix[from][to] = cost;
costMatrix[to][from] = cost;
}
}
int indexOfVillage;
for (indexOfVillage = 1; indexOfVillage < numOfVillages; indexOfVillage++){
flagOfInTree[indexOfVillage] = 0;
minCostArray[indexOfVillage] = costMatrix[0][indexOfVillage];
}
minCostArray[0] = 0;
flagOfInTree[0] = 1;
int numOfVillagesInTree;
for (numOfVillagesInTree = 1; numOfVillagesInTree <= numOfVillages; numOfVillagesInTree++){
int minCost = INF;
int villageCostLeast = 0;
for (indexOfVillage = 1; indexOfVillage < numOfVillages; indexOfVillage++){
if ( !flagOfInTree[indexOfVillage] && minCostArray[indexOfVillage] < minCost){
minCost = minCostArray[indexOfVillage];
villageCostLeast = indexOfVillage;
}
}
flagOfInTree[villageCostLeast] = 1;
for (indexOfVillage = 1; indexOfVillage < numOfVillages; indexOfVillage++){
if (!flagOfInTree[indexOfVillage] && costMatrix[indexOfVillage][villageCostLeast] < minCostArray[indexOfVillage]){
minCostArray[indexOfVillage] = costMatrix[indexOfVillage][villageCostLeast];
}
}
}
int totalMinCost = 0;
for (indexOfVillage = 1; indexOfVillage < numOfVillages; indexOfVillage++){
totalMinCost += minCostArray[indexOfVillage];
}
printf("%d\n", totalMinCost);
}
}
POJ 1251 Jungle Roads (最小生成树 Prim普里姆算法)
最新推荐文章于 2021-07-29 19:22:22 发布