Skip to content

Commit 53e14e5

Browse files
committed
Implement undirected graph and directed graph separately
1 parent 9d07223 commit 53e14e5

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

python/31_bfs_dfs/graph.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# -*- coding:utf-8 -*-
2+
3+
4+
class Undigraph(object):
5+
6+
7+
def __init__(self, vertex_num):
8+
self.v_num = vertex_num
9+
self.adj_tbl = []
10+
for i in range(self.v_num + 1):
11+
self.adj_tbl.append([])
12+
13+
def add_edge(self, s, t):
14+
if s > self.v_num or t > self.v_num:
15+
return False
16+
self.adj_tbl[s].append(t)
17+
self.adj_tbl[t].append(s)
18+
return True
19+
20+
def __len__(self):
21+
return self.v_num
22+
23+
def __getitem__(self, ind):
24+
if ind > self.v_num:
25+
raise IndexError("No Such Vertex!")
26+
return self.adj_tbl[ind]
27+
28+
def __repr__(self):
29+
return str(self.adj_tbl)
30+
31+
def __str__(self):
32+
return str(self.adj_tbl)
33+
34+
35+
class Digraph(object):
36+
37+
38+
def __init__(self, vertex_num):
39+
self.v_num = vertex_num
40+
self.adj_tbl = []
41+
for i in range(self.v_num + 1):
42+
self.adj_tbl.append([])
43+
44+
def add_edge(self, frm, to):
45+
if frm > self.v_num or to > self.v_num:
46+
return False
47+
self.adj_tbl[frm].append(to)
48+
49+
def __len__(self):
50+
return self.v_num
51+
52+
def __getitem__(self, ind):
53+
if ind > self.v_num:
54+
raise IndexError("No such vertex!")
55+
return self.ajd_tbl[ind]
56+
57+
def __repr__(self):
58+
return str(self.adj_tbl)
59+
60+
def __str__(self):
61+
return str(self.adj_tbl)
62+
63+
64+
if __name__ == '__main__':
65+
ug = Undigraph(10)
66+
ug.add_edge(1, 9)
67+
ug.add_edge(1, 3)
68+
ug.add_edge(3, 2)
69+
print(ug.adj_tbl)
70+
71+
dg = Digraph(10)
72+
dg.add_edge(1, 9)
73+
dg.add_edge(1, 3)
74+
dg.add_edge(3, 4)
75+
print(dg.adj_tbl)

0 commit comments

Comments
 (0)