标签:center 接下来 else 割点 class 技术 一个 节点 str
割边也称为桥,即在一个无向连同图中,如果删除某条边后,图不再联通,那么这条边就是图的割边。下图中左图不存在割边,而右图有两条割边,分别是2-5和5-6。
输入第一行有两个整数n,m。n表示有n个顶点,m表示有m条边。
接下来m行,每行形如"a b"表示顶点a和顶点b之间有边。
输出图的所有割边,形如"a-b"表示顶点a到b的边。
6 6
1 4
1 3
4 2
3 2
2 5
5 6
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