1
#include <iostream>2
using namespace std;3
#define csINF 999999994
#define csMaxLimit 1015
int iNumOfNodes,iTotalCost,iNodeFromCount;6
bool bNodeFromFlag[csMaxLimit];7
bool bNodeToFlag[csMaxLimit];8
int iCost[csMaxLimit][csMaxLimit];9

10
struct stMinCostEdgeInfo11


{12
int iFromNode;13
int iToNode;14
int iWeight;15
};16

17

18
struct stMinCostEdgeInfo FunGetMinCost()19


{20
int i,j,iTempMin,iFromIndex,iToIndex;21
struct stMinCostEdgeInfo stRetValue;22
iTempMin=csINF;23
iFromIndex=0;24
iToIndex=0;25
for(i=1;i<=iNumOfNodes;i++)26

{27
28
if(bNodeFromFlag[i])29

{30
for(j=1;j<=iNumOfNodes;j++)31

{32
if(bNodeToFlag[j])33

{34
if(iCost[i][j]<iTempMin)35

{36
iFromIndex=i;37
iToIndex=j;38
iTempMin=iCost[i][j];39
}40
}41
}42
}43

44
}45
stRetValue.iWeight=iTempMin;46
stRetValue.iFromNode=iFromIndex;47
stRetValue.iToNode=iToIndex;48
return stRetValue;49
}50

51
void procInitial()52


{53
int i,iStartNode;54
for(i=1;i<=iNumOfNodes;i++)55

{56
bNodeFromFlag[i]=false;57
bNodeToFlag[i]=true;58
}59
iTotalCost=0;60
iStartNode=1;61
iNodeFromCount=1;62
bNodeFromFlag[iStartNode]=true;63
bNodeToFlag[iStartNode]=false;64
}65

66

67

68
void procInput()69


{70
int i,j;71
for(i=1;i<=iNumOfNodes;i++)72

{73
for(j=1;j<=iNumOfNodes;j++)74

{75
scanf("%d",&iCost[i][j]);76
}77
}78
}79
void procPrim()80


{81
struct stMinCostEdgeInfo stMinCostEdge;82
while(iNodeFromCount<iNumOfNodes)83

{84
stMinCostEdge=FunGetMinCost();85
iTotalCost+=stMinCostEdge.iWeight;86
bNodeFromFlag[stMinCostEdge.iToNode]=true;87
bNodeToFlag[stMinCostEdge.iToNode]=false;88
iNodeFromCount++;89
}90
}91

92

93

94
void procOuput()95


{96
printf("%d\n",iTotalCost);97
}98

99
int main()100


{101
while (1==scanf("%d",&iNumOfNodes))102

{103
procInput();104
procInitial();105
if(iNumOfNodes>1)106

{107
procPrim();108
}109
procOuput();110
}111
return 0;112

113
}
浙公网安备 33010602011771号