#include <iostream>
using namespace std;
#define INF 65535
#define MAX 10
typedef struct
{
char Vertex[MAX];
int arc[MAX][MAX];
int numVertex, numEdges;
}MGraph;
void GraphIint(MGraph *G)
{
int i, j;
cout<<"input numVertex less than "<<MAX<<endl;
cin>>G->numVertex;
for(i = 0; i < G->numVertex; i++)
{
for(j = i; j < G->numVertex; j++)
{
cout<<"arc["<<i<<']'<<'['<<j<<']'<<endl;
cin>>G->arc[i][j];
G->arc[j][i] = G->arc[i][j];
}
cout<<endl;
}
for(i = 0; i < G->numVertex; i++)
{
for(j = 0; j < G->numVertex; j++)
{
cout<<" "<<G->arc[i][j];
}
cout<<endl;
}
}
void MiniSpanTree_Prim(MGraph G)
{
int min, i, j, k;
int lowcost[MAX];
int adjvex[MAX];
lowcost[0] = 0;
adjvex[0] = 0;
for(i = 1; i < G.numVertex; i++)
{
lowcost[i] = G.arc[0][i];
adjvex[i] = 0;
}
for(i = 1; i < G.numVertex; i++)
{
min = INF;
k = 0;
j = 1;
while(j < G.numVertex)
{
if((lowcost[j] != 0) && (lowcost[j] < min))
{
min = lowcost[j];
k = j;
}
j++;
}
cout<<'('<<adjvex[k]<<','<<k<<')'<<endl;
lowcost[k] = 0;
for(j =1; j < G.numVertex; j++)
{
if((lowcost[j] != 0) && (G.arc[k][j] < lowcost[j]))
{
lowcost[j] = G.arc[k][j];
adjvex[j] = k;
}
}
}
}
int main(void)
{
MGraph G = {0};
GraphIint(&G);
MiniSpanTree_Prim(G);
return 0;
}