Prim算法

来源:互联网 发布:sql必知必会 pdf 微盘 编辑:程序博客网 时间:2024/06/03 23:19
 #include <iostream>#include<string>#include<queue>using namespace std;#define INF 64typedef 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;}

0 0
原创粉丝点击