#include
using namespace std;
typedef char VertexData;
typedef int EdgeData;
typedef struct
{
VertexData verlist[8];
EdgeData edge[8][8];
int n,e;
}MTGraph;
void CreateMGraph(MTGraph &G)
{
char zifu[]="abcdefgh";
int i,j,k,w;
cout<<"请输入顶点个数和边数:"<<endl;
cin>>G.n>>G.e;
for(i=0;i<G.n;i++)
{
G.verlist[i]=zifu[i];
}
for(i=0;i<G.n;i++)//初始化邻接矩阵
{
for(j=0;j<G.n;j++)
{
G.edge[i][j]=100;
}
}
cout<<"请输入每条边的权值:"<<endl;
for(k=0;k<G.e;k++)//输入每条边的权值
{
cin>>i>>j>>w;
G.edge[i][j]=w;
G.edge[j][i]=w;
}
}
void Prim(MTGraph &G)
{
int LOWCOST[8];
char CLOSEST[8];
int i,j,k;
int min;
for(i=0;i<G.n;i++)//初始化两个辅助数组
{
LOWCOST[i]=G.edge[0][i];
CLOSEST[i]=‘a’;
}
LOWCOST[0]=0;
cout<<“从顶点a开始”<<endl;//输出顶点vo,从vo开始
for(i=1;i<G.n;i++)//算法主要程序
{//
if(LOWCOST[i]!=0)
{
min=LOWCOST[i];
k=i;
for(j=0;j<G.n;j++)//找到LOWCOST中最小的路径
{
if(LOWCOST[j]<min&&LOWCOST[j]!=0)
{
min=LOWCOST[j];
k=j;
}
}
}
else//LOWCOST等于0时为选择过,跳到下一个
{
min=LOWCOST[i+1];
k=i+1;
for(j=0;j<G.n;j++)//找到LOWCOST中最小的路径
{
if(LOWCOST[j]<min&&LOWCOST[j]!=0)
{
min=LOWCOST[j];
k=j;
}
}
}
cout<<"("<<k<<","<<G.verlist[k]<<")"<<endl;
LOWCOST[k]=0;//更新数组
for(j=0;j<G.n;j++)//更新两个辅助数组
{
if(G.edge[k][j]<LOWCOST[j]&&LOWCOST[j]<101)
{
LOWCOST[j]=G.edge[k][j];
CLOSEST[j]=G.verlist[k];
}
}
}//
}
void main()
{
MTGraph G;
CreateMGraph(G);
Prim(G);
}