关于邻接矩阵下的破圈法

这篇博客介绍了如何通过破圈法来找出无向图的最小生成树。首先应用拓扑排序找到图中的环,接着删除最大权重的边,不断重复此过程直至图中无环。提供的C++代码详细展示了算法的实现步骤。
摘要由CSDN通过智能技术生成

图初学者写的代码,不高大上,能让人看懂就好。

破圈法:

   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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值