图初学者写的代码,不高大上,能让人看懂就好。
破圈法:
1.用拓扑分类算法,找到图中的圈。具体就是依次找到图中度为1的顶点,删除之(这里的删除是暂时的,下次遍历还要还原这些点),然后与其邻接的顶点的入度-1,这样往复操作,直到图中已不存在入度为1的顶点,即所有的顶点的度都>=2,那么剩下的边就都在环里了。当然,如果没剩下边,说明没有环,算法结束。
2.剩下的边就都是环中的边了,找一个权最大的删去即可。
3.再进行1操作,直到图中无圈,即所有的圈都已破掉,
剩下的就是最小生成树了。
int main(){
int **G;
cout<<"请输入无向图的顶点数";
cin>>N;
cout<<"请输入无向图的邻接矩阵:"<<endl;
G=new int *[N];
for(int i=0;i<N;i++){
G[i]=new int [N];
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cin>>G[i][j];
}
}
// 破圈法求最小代价生成树;
cout<<"破圈法算法求最小代价生成树的边为:"<<endl;
Breakcircle(G);
return 0;