#include <iostream>
#include<string>
#include<queue>
using namespace std;
#define INF 64
typedef struct graph{ //
string vexs[10];
int arc[10][10];
int vexnum,arcnum;
}Graph;
int visited[10];
int GraphLocateVertex(Graph G,string vex);
Graph GraphCreate()
{
Graph G;
int i,j,m,n,temp;
string vex1,vex2;
cout<<"input the num of the graph's vex and arc:"<<endl;
cin>>G.vexnum>>G.arcnum;
for(i=0;i<G.vexnum;i++)
{
for(j=0;j<G.vexnum;j++)
{
if(i==j)
{
G.arc[i][j]=0;
}
else
{
G.arc[i][j]=INF;
}
}
}
cout<<"input the information of the graph's vex :"<<endl;
for(i=0;i<G.vexnum;i++)
{
cin>>G.vexs[i];
}
cout<<"input the information of the graph's arc:"<<endl;
for(j=0;j<G.arcnum;j++)
{
cin>>vex1>>vex2>>temp;
m=GraphLocateVertex(G,vex1);
n=GraphLocateVertex(G,vex2);
G.arc[m][n]=temp;
G.arc[n][m]=temp;
}
return G;
}
int GraphLocateVertex(Graph G,string vex)
{
int i,result;
for(i=0;i<G.vexnum;i++)
{
if(vex==G.vexs[i])
{
result=i;
}
}
return result;
}
void Min_prim(Graph G,string v)
{
int i,j,k,temp,min;
i=GraphLocateVertex(G,v);
int lowcost[INF],closest[INF];
for(j=0;j<G.vexnum;j++)
{
lowcost[j]=G.arc[i][j];
closest[j]=i;
}
for(k=1;k<G.vexnum;k++)
{
min=INF;
for(j=0;j<G.vexnum;j++)
{
if(lowcost[j]!=0 && lowcost[j]<min)
{
min=lowcost[j];
temp=j;
}
}
cout<<"("<<closest[temp]<<","<<temp<<")"<<":"<<min<<endl;
lowcost[temp]=0;
for(j=0;j<G.vexnum;j++)
{
if(G.arc[k][j]!=0 && G.arc[k][j]<lowcost[j])
{
lowcost[j]=G.arc[k][j];
closest[j]=k;
}
}
}
}
int main()
{
Graph Gt;
string v;
Gt=GraphCreate();
cin>>v;
Min_prim(Gt,v);
system("pause");
return 0;
}
Prim算法
最新推荐文章于 2022-09-20 16:40:27 发布