求乙個圖的連通分量
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 ...