File tree Expand file tree Collapse file tree 3 files changed +102
-0
lines changed
graph-theory/01-graph-representation Expand file tree Collapse file tree 3 files changed +102
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ #include < cassert>
3
+ #include < vector>
4
+
5
+ using namespace std ;
6
+
7
+ class DenseGraph {
8
+ private:
9
+ int n, m; // 节点数和边数
10
+ bool directed; // 是否为有向图
11
+ vector<vector<bool > > g; // 图的具体数据
12
+
13
+ public:
14
+ // 构造函数
15
+ DenseGraph (int n, bool directed){
16
+ assert (n >= 0 );
17
+ this ->n = n;
18
+ this ->m = 0 ;
19
+ this ->directed = directed;
20
+ for (int i = 0 ; i < n; i++)
21
+ {
22
+ g.push_back (vector<bool >(n, false ));
23
+ }
24
+ }
25
+ ~DenseGraph (){}
26
+
27
+ int V (){return n;}
28
+ int E (){return m;}
29
+
30
+ void addEdge (int v, int w){
31
+ assert (v >= 0 && v < n);
32
+ assert (w >= 0 && w < n);
33
+ if (hasEdge (v,w)){
34
+ return ;
35
+ }
36
+ g[v][w] = true ;
37
+ if (!directed){
38
+ g[w][v] = true ;
39
+ }
40
+ m++;
41
+ }
42
+
43
+ bool hasEdge (int v, int w){
44
+ assert (v >= 0 && v <n);
45
+ assert (w >= 0 && w < n);
46
+ return g[v][w];
47
+ }
48
+ };
Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ #include < cassert>
3
+ #include < vector>
4
+
5
+ using namespace std ;
6
+
7
+ class SparseGraph
8
+ {
9
+ private:
10
+ int n, m; // 节点数和边数
11
+ bool directed; // 是否为有向图
12
+ vector<vector<int > > g; // 图的具体连接情况
13
+
14
+ public:
15
+ // 构造函数
16
+ SparseGraph (int n, int directed){
17
+ this ->n = n;
18
+ this ->m = 0 ;
19
+ this ->directed = directed;
20
+ for (int i = 0 ;i<n;i++){
21
+ g.push_back (vector<int >());
22
+ }
23
+ }
24
+ ~SparseGraph (){}
25
+
26
+ int V (){return n;}
27
+ int W (){return m;}
28
+
29
+ void addEdge (int v, int w){
30
+ assert (v >= 0 && v < n);
31
+ assert (w >= 0 && w < n);
32
+ g[v].push_back (w);
33
+ // 考虑自环边
34
+ if ( v != w && !directed){
35
+ g[w].push_back (v);
36
+ }
37
+ m++;
38
+ }
39
+ // 需要遍历 O(n)
40
+ bool hasEdge (int v, int w){
41
+ assert (v >= 0 && v < n);
42
+ assert (w >= 0 && w < n);
43
+ for (int i = 0 ;i<g[v].size ();i++){
44
+ if (g[v][i] == w)
45
+ return true ;
46
+ return false ;
47
+ }
48
+ }
49
+ };
Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ #include < cassert>
3
+
4
+ using namespace std ;
5
+
You can’t perform that action at this time.
0 commit comments