Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 47e19bf

Browse files
Adjacency list in Python
1 parent 740374c commit 47e19bf

File tree

4 files changed

+779
-0
lines changed

4 files changed

+779
-0
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# Copyright (C) Deepali Srivastava - All Rights Reserved
2+
# This code is part of DSA course available on CourseGalaxy.com
3+
4+
class Vertex:
5+
def __init__(self, name):
6+
self.name = name
7+
8+
9+
class UndirectedGraph:
10+
11+
def __init__(self):
12+
self._graph = {}
13+
self._vertexObjects = set()
14+
15+
16+
def display(self):
17+
for vertex in self._graph:
18+
print( vertex, " - > " , self._graph[vertex] )
19+
print()
20+
21+
22+
def numVertices(self):
23+
return len(self._graph)
24+
25+
26+
def numEdges(self):
27+
e = 0
28+
for adjList in self._graph.values():
29+
e += len(adjList)
30+
return e//2
31+
32+
33+
def vertices(self):
34+
return list(self._graph)
35+
36+
37+
def edges(self):
38+
edgesList = []
39+
for u in self._graph:
40+
for v in self._graph[u]:
41+
if(v,u) not in edgesList:
42+
edgesList.append((u,v))
43+
return edgesList
44+
45+
46+
def insertVertex(self,name):
47+
48+
if name in self._graph:
49+
print("Vertex with this name already present in the graph")
50+
else:
51+
self._graph[name] = set()
52+
self._vertexObjects.add( Vertex(name) )
53+
54+
55+
def removeVertex(self,name):
56+
if name not in self._graph:
57+
print("Vertex not present in the graph")
58+
return
59+
60+
self._graph.pop(name)
61+
62+
for u in self._graph:
63+
if name in self._graph[u]:
64+
self._graph[u].remove(name)
65+
66+
for vertex in self._vertexObjects:
67+
if name == vertex.name:
68+
v = vertex
69+
break
70+
self._vertexObjects.remove(v)
71+
72+
73+
def insertEdge(self, s1, s2):
74+
if s1 not in self._graph:
75+
print("First vertex not present in the graph")
76+
elif s2 not in self._graph:
77+
print("Second vertex not present in the graph")
78+
elif s1 == s2:
79+
print("Not a valid edge")
80+
elif s2 in self._graph[s1]:
81+
print("Edge already present in the graph")
82+
else:
83+
self._graph[s1].add(s2)
84+
self._graph[s2].add(s1)
85+
86+
87+
88+
def removeEdge(self, s1,s2):
89+
if s2 not in self._graph[s1]:
90+
print("Edge not present in the graph")
91+
else:
92+
self._graph[s1].remove(s2)
93+
self._graph[s2].remove(s1)
94+
95+
96+
def isAdjacent(self, s1, s2):
97+
if s1 not in self._graph:
98+
print("First vertex not present in the graph")
99+
return False
100+
if s2 not in self._graph:
101+
print("Second vertex not present in the graph")
102+
return False
103+
return s2 in self._graph[s1]
104+
105+
106+
def degree(self, s):
107+
if s not in self._graph:
108+
print("Vertex not present in the graph")
109+
return
110+
return len(self._graph[s])
111+
112+
113+
def _getVertex(self,s):
114+
for vertex in self._vertexObjects:
115+
if s == vertex.name:
116+
return vertex
117+
return None
118+
119+
120+
if __name__ == '__main__':
121+
122+
g = UndirectedGraph()
123+
124+
g.insertVertex("AA")
125+
g.insertVertex("BB")
126+
g.insertVertex("CC")
127+
g.insertVertex("DD")
128+
g.insertVertex("EE")
129+
g.insertEdge("AA","BB")
130+
g.insertEdge("AA","CC")
131+
g.insertEdge("CC","DD")
132+
g.insertEdge("DD","AA")
133+
g.insertEdge("BB","EE")
134+
135+
while True:
136+
print("1.Display Adjacency list, vertices and edges")
137+
print("2.Insert a vertex")
138+
print("3.Remove a vertex")
139+
print("4.Insert an edge")
140+
print("5.Delete an edge")
141+
print("6.Display degree of a vertex")
142+
print("7.Check if there is an edge between two vertices")
143+
print("8.Quit")
144+
145+
option = int(input("Enter your choice : " ))
146+
147+
if option == 1:
148+
g.display()
149+
print("Number of vertices : ", g.numVertices() )
150+
print("Number of edges : ", g.numEdges() )
151+
print("List of Vertices : ", g.vertices() )
152+
print("List of Edges : ", g.edges() )
153+
elif option == 2:
154+
s = input("Enter the name of vertex : ")
155+
g.insertVertex(s)
156+
elif option == 3:
157+
s = input("Enter the name of vertex : ")
158+
g.removeVertex(s)
159+
elif option == 4:
160+
s1 = input("Enter the name of first vertex : ")
161+
s2 = input("Enter the name of second vertex : ")
162+
g.insertEdge(s1,s2)
163+
elif option == 5:
164+
s1 = input("Enter the name of first vertex : ")
165+
s2 = input("Enter the name of second vertex : ")
166+
g.removeEdge(s1,s2)
167+
elif option == 6:
168+
s = input("Enter vertex name : ")
169+
d = g.degree(s)
170+
if d is not None:
171+
print("Degree of", s , "is", d)
172+
elif option == 7:
173+
s1 = input("Enter the name of first vertex : ")
174+
s2 = input("Enter the name of second vertex : ")
175+
if g.isAdjacent(s1, s2):
176+
print("There is an edge from ", s1 , " to " , s2)
177+
else:
178+
print("There is no edge from " , s1 , " to " , s2)
179+
elif option == 8:
180+
break
181+
else:
182+
print("Wrong option")
183+
184+
print()
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
# Copyright (C) Deepali Srivastava - All Rights Reserved
2+
# This code is part of DSA course available on CourseGalaxy.com
3+
4+
class Vertex:
5+
def __init__(self, name):
6+
self.name = name
7+
8+
9+
class DirectedGraph:
10+
11+
def __init__(self):
12+
self._graph = {}
13+
self._vertexObjects = set()
14+
15+
16+
def display(self):
17+
for vertex in self._graph:
18+
print( vertex, " - > " , self._graph[vertex] )
19+
print()
20+
21+
22+
def numVertices(self):
23+
return len(self._graph)
24+
25+
26+
def numEdges(self):
27+
e = 0
28+
for adjList in self._graph.values():
29+
e += len(adjList)
30+
return e
31+
32+
33+
def vertices(self):
34+
return list(self._graph)
35+
36+
37+
def edges(self):
38+
edgesList = []
39+
for u in self._graph:
40+
for v in self._graph[u]:
41+
edgesList.append((u,v))
42+
return edgesList
43+
44+
45+
def insertVertex(self,name):
46+
if name in self._graph:
47+
print("Vertex with this name already present in the graph")
48+
else:
49+
self._graph[name] = set()
50+
self._vertexObjects.add( Vertex(name) )
51+
52+
53+
def removeVertex(self,name):
54+
if name not in self._graph:
55+
print("Vertex not present in the graph")
56+
return
57+
58+
self._graph.pop(name)
59+
60+
for u in self._graph:
61+
if name in self._graph[u]:
62+
self._graph[u].remove(name)
63+
64+
for vertex in self._vertexObjects:
65+
if name == vertex.name:
66+
v = vertex
67+
break
68+
self._vertexObjects.remove(v)
69+
70+
71+
def insertEdge(self, s1, s2):
72+
if s1 not in self._graph:
73+
print("Start vertex not present in the graph, first insert the start vertex")
74+
elif s2 not in self._graph:
75+
print("End vertex not present in the graph, first insert the end vertex")
76+
elif s1 == s2:
77+
print("Not a valid edge")
78+
elif s2 in self._graph[s1]:
79+
print("Edge already present in the graph")
80+
else:
81+
self._graph[s1].add(s2)
82+
83+
84+
def removeEdge(self, s1,s2):
85+
if s2 not in self._graph[s1]:
86+
print("Edge not present in the graph")
87+
else:
88+
self._graph[s1].remove(s2)
89+
90+
91+
def isAdjacent(self, s1, s2):
92+
if s1 not in self._graph:
93+
print("Start vertex not present in the graph")
94+
return False
95+
if s2 not in self._graph:
96+
print("End vertex not present in the graph")
97+
return False
98+
return s2 in self._graph[s1]
99+
100+
101+
def outdegree(self, s):
102+
if s not in self._graph:
103+
print("Vertex not present in the graph")
104+
return
105+
return len(self._graph[s])
106+
107+
108+
def indegree(self, s):
109+
if s not in self._graph:
110+
print("Vertex not present in the graph")
111+
return
112+
113+
ind = 0
114+
for u in self._graph:
115+
ind += list(self._graph[u]).count(s)
116+
117+
return ind
118+
119+
def _getVertex(self,s):
120+
for vertex in self._vertexObjects:
121+
if s == vertex.name:
122+
return vertex
123+
return None
124+
125+
126+
if __name__ == '__main__':
127+
128+
g = DirectedGraph()
129+
130+
g.insertVertex("AA")
131+
g.insertVertex("BB")
132+
g.insertVertex("CC")
133+
g.insertVertex("DD")
134+
g.insertVertex("EE")
135+
g.insertEdge("AA","BB")
136+
g.insertEdge("AA","CC")
137+
g.insertEdge("CC","DD")
138+
g.insertEdge("DD","AA")
139+
g.insertEdge("CC","AA")
140+
g.insertEdge("BB","EE")
141+
142+
while True:
143+
print("1.Display Adjacency list, vertices and edges")
144+
print("2.Insert a vertex")
145+
print("3.Remove a vertex")
146+
print("4.Insert an edge")
147+
print("5.Delete an edge")
148+
print("6.Display indegree and outdegree of a vertex")
149+
print("7.Check if there is an edge between two vertices")
150+
print("8.Quit")
151+
152+
option = int(input("Enter your choice : " ))
153+
154+
if option == 1:
155+
g.display()
156+
print("Number of vertices : ", g.numVertices() )
157+
print("Number of edges : ", g.numEdges() )
158+
print("List of Vertices : ", g.vertices() )
159+
print("List of Edges : ", g.edges() )
160+
elif option == 2:
161+
s = input("Enter the name of vertex : ")
162+
g.insertVertex(s)
163+
elif option == 3:
164+
s = input("Enter the name of vertex : ")
165+
g.removeVertex(s)
166+
elif option == 4:
167+
s1 = input("Enter the name of start vertex : ")
168+
s2 = input("Enter the name of end vertex : ")
169+
g.insertEdge(s1,s2)
170+
elif option == 5:
171+
s1 = input("Enter the name of start vertex : ")
172+
s2 = input("Enter the name of end vertex : ")
173+
g.removeEdge(s1,s2)
174+
elif option == 6:
175+
s = input("Enter vertex name : ")
176+
i = g.indegree(s)
177+
if i is not None:
178+
print("Indegree of", s , "is", i)
179+
o = g.outdegree(s)
180+
if o is not None:
181+
print("Outdegree of", s , "is", o)
182+
elif option == 7:
183+
s1 = input("Enter the name of first vertex : ")
184+
s2 = input("Enter the name of second vertex : ")
185+
if g.isAdjacent(s1, s2):
186+
print("There is an edge from ", s1 , " to " , s2)
187+
else:
188+
print("There is no edge from " , s1 , " to " , s2)
189+
elif option == 8:
190+
break
191+
else:
192+
print("Wrong option")
193+
194+
print()
195+
196+
197+
198+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /