SSL1759 連通分量 五種方法

2021-10-01 11:18:19 字數 2133 閱讀 4563

求乙個圖的連通分量

input

n 頂點數(<=100)

連線的邊

output

連通分量

sample input

86 3

1 22 5

5 44 1

8 70 0

sample output1.dfs+鄰接矩陣

2.dfs+鄰接表

3.bfs+鄰接矩陣

4.bfs+鄰接表

5.bfs+鄰接表+stl

方法一:用乙個陣列作為鄰接矩陣儲存,再dfs,要注意判斷走過沒有。

#include

#include

using

namespace std;

int n,x,y,a[

101]

[101

],p[

101]

,ans,s;

//a是矩陣

void

dfs(

int i)}}

intmain()

for(

int i=

1;i<=n;i++)}

cout

}

方法二:用dfs,但是用鍊錶的方法存,搜尋時就省了很多時間,不用乙個乙個過邊。
#include

#include

using

namespace std;

int n,x,y,p[

101]

,ans,s,k,b[

101]

;struct node

a[10001];

intdfs

(int i)

}return s;

}int

main()

for(

int i=

1;i<=n;i++)}

cout

}

方法三:同樣是用鄰接矩陣,但用bfs,從每乙個位置開始,s記錄數量,最後return s再選乙個最大值。
#include

#include

using

namespace std;

int n,x,y,a[

101]

[101

],p[

101]

,ans,s;

void

bfs(

int i)}}

}int

main()

for(

int i=

1;i<=n;i++)}

cout

}

方法四:用bfs和鄰接表,內容基本就是方法二和方法三的合成體,同時注意迴圈和判斷。
#include

#include

using

namespace std;

int n,x,y,p[

101]

,ans,s,k,b[

101]

;struct node

a[10001];

intbfs

(int i)}}

}int

main()

for(

int i=

1;i<=n;i++)}

cout

}

方法五:和方法四的思路相同,但運用了一種鮮為人 我知的技術——stl(queue)。把一些跟佇列有關的語句用stl實現。
#include

#include

#include

using

namespace std;

int n,x,y,p[

101]

,ans,s,k,b[

101]

;struct node

a[10001];

intbfs

(int i)}}

}int

main()

for(

int i=

1;i<=n;i++)}

cout

}

搞掂五種方法啦!開森(/≧▽≦)/

ssl1759 求連通分量

求連通分量 time limit 1000ms memory limit 65536k total submit 240 accepted 135 description 求乙個圖的連通分量 input n 頂點數 100 邊 output 連通分量 sample input 5 1 23 4 2 ...

SSL 1759 求連通分量

求乙個圖的連通分量 應為最大連通分量 n頂點數 100 邊連通分量 同上 863 1225 5441 87004對於每個點,判斷是否被標記過,如果沒有,就從該點向外搜尋並標記,並對大小取最大值即可 本題寫了五種特別像的方法,請欣賞 include include using namespace st...

1759 求連通分量

求連通分量 time limit 1000ms memory limit 65536k total submit 243 accepted 136 description 求乙個圖的連通分量 input n 頂點數 100 邊 output 連通分量 sample input 5 1 23 4 2 ...