Skip to content

Commit 68816cb

Browse files
committed
generate graph with two different ways finished
1 parent 6a6ed10 commit 68816cb

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
};
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include <iostream>
2+
#include <cassert>
3+
4+
using namespace std;
5+

0 commit comments

Comments
 (0)