码迷,mamicode.com
首页 > 编程语言 > 详细

[啊哈算法]关键道路(图的割边)

时间:2020-02-03 11:44:15      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:center   接下来   else   割点   class   技术   一个   节点   str   

Description

割边也称为桥,即在一个无向连同图中,如果删除某条边后,图不再联通,那么这条边就是图的割边。下图中左图不存在割边,而右图有两条割边,分别是2-5和5-6。

技术图片

 

Input

输入第一行有两个整数n,m。n表示有n个顶点,m表示有m条边。

接下来m行,每行形如"a b"表示顶点a和顶点b之间有边。

Output

输出图的所有割边,形如"a-b"表示顶点a到b的边。

Sample Input

6 6
1 4
1 3
4 2
3 2
2 5
5 6

Sample Output

5-6
2-5


 1 #include<iostream>
 2 //#include<fstream>
 3 using namespace std;
 4 int n,m;
 5 int root;
 6 int e[103][103];
 7 int num[103];
 8 int low[103];
 9 int index;
10 void dfs(int cur,int father){
11     index++;
12     num[cur]=index;
13     low[cur]=index;
14     for(int i=1;i<=n;i++){
15         if(e[cur][i]==1){
16             if(num[i]==0){
17                 dfs(i,cur);
18                 low[cur]=min(low[cur],low[i]);
19                 if(low[i]>num[cur])
20                     cout<<cur<<-<<i<<endl;
21             }
22             else if(i!=father)
23                 low[cur]=min(low[cur],num[i]);
24         }
25     }
26 }
27 int main(){
28 //    fstream file("haha.txt");
29 //    file>>n>>m;
30     cin>>n>>m;
31     for(int i=1;i<=n;i++){
32         for(int j=1;j<=n;j++){
33             e[i][j]=0;
34         }
35     }
36     int a,b;
37     for(int i=1;i<=m;i++){
38     //    file>>a>>b;
39         cin>>a>>b;
40         e[a][b]=1;
41         e[b][a]=1;
42     }
43     root=1;
44     dfs(1,root);
45     return 0;
46 }

 


割边比割点简单,只要把条件low[i]>=num[i]改成low[i]>num[i]就行了,并且割边的代码里因为不用判断cur是否为根节点,
所以也不用child了,


[啊哈算法]关键道路(图的割边)

标签:center   接下来   else   割点   class   技术   一个   节点   str   

原文地址:https://www.cnblogs.com/fate-/p/12254734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!