#include <iostream>
#include <C:\Users\chenyi\OneDrive\c_work_space\A_数据结构调用\无向网\main.cpp>
//此处调用见底端无向网链接,自行整合
using namespace std;
int LocateVex(AMGraph G,VerTexType v);
/**辅助数组,存储最小边与值*/
struct CLOSE{
VerTexType adjvex;
ArcType lowcost;
}closedge[MVNum];
int Min(struct CLOSE closedge);
/**普里姆算法,u是定点,从他出发*/
void MiniSpanTree_Prim(AMGraph G,VerTexType u){
cout<<"a-a"<<endl;
int k = LocateVex(G,u); //u点所在的位置传递给k
cout<<k<<endl;
for(int j=0;j<G.vexnum;j++){
if(j!=k) closedge[j] = {u,G.arcs[k][j]}; //给closedge做一个初始化,k为起点
cout<<closedge[j].adjvex<<","<<closedge[j].lowcost<<"丨";
}
cout<<endl<<"point and weight"<<endl;
closedge[k].lowcost = 0;//自己到自己长度肯定是0;
for(int i=1;i<G.vexnum;i++){
//k = Min(*closedge);
int weight = MaxInt;
for(int z=0;z<G.vexnum;z++){
if(closedge[z].lowcost!=0&&closedge[z].lowcost<=weight){
k = z;//k是位置坐标
weight = closedge[z].lowcost;
}
}
//cout<<"min pos:"<<k<<" ,and the weight : "<<weight<<endl;
VerTexType v1,v2;//v1是访问过的,v2是没有访问过的
v1 = closedge[k].adjvex;
v2 = G.vexs[k];
//cout<<"the point: "<<v1<<" "<<v2<<" "<<G.arcs[LocateVex(G,v1)][LocateVex(G,v2)]<<endl;
for(int j=0;j<G.vexnum;j++){
cout<<closedge[j].adjvex<<","<<closedge[j].lowcost<<"丨";
}
cout<<" "<<v1<<" "<<v2<<endl;
closedge[k].lowcost = 0;
for(int j=0;j<G.vexnum;j++){ //替换掉比上一届大的值
if(G.arcs[k][j]<closedge[j].lowcost){
closedge[j] = {G.vexs[k],G.arcs[k][j]};
}
}
}
}
int main()
{
AMGraph amg;
CreatUDN(amg); //创建无向网络
UDN_dis(amg); //显示无向网!
MiniSpanTree_Prim(amg,'1');
return 0;
}
int LocateVex(AMGraph G,VerTexType v){
for(int i=0;i<G.vexnum;i++){
if(G.vexs[i]==v){
return i;
}
}
return -1;
}
//int Min(struct CLOSE){
// ;
//}
/**
6 10
1 2 3 4 5 6
1 2 6
1 4 5
1 3 1
2 3 5
3 4 5
4 6 2
2 5 3
3 5 6
3 6 4
5 6 6
*/