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 903d2cb

Browse files
Graph in Python
1 parent 9b7b010 commit 903d2cb

File tree

1 file changed

+233
-0
lines changed

1 file changed

+233
-0
lines changed

‎Graph/path-matrix.py

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
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,size=20):
12+
self._adj = [ [0 for column in range(size)] for row in range(size) ]
13+
self._n = 0
14+
self._vertexList = []
15+
16+
17+
def display(self):
18+
for i in range(self._n):
19+
for j in range(self._n):
20+
print( self._adj[i][j], end =' ')
21+
print()
22+
23+
24+
def numVertices(self):
25+
return self._n
26+
27+
28+
def numEdges(self):
29+
e = 0
30+
for i in range(self._n):
31+
for j in range(self._n):
32+
if self._adj[i][j]!=0:
33+
e+=1
34+
return e
35+
36+
37+
def vertices(self):
38+
return [vertex.name for vertex in self._vertexList]
39+
40+
41+
def edges(self):
42+
edges = []
43+
for i in range(self._n):
44+
for j in range(self._n):
45+
if self._adj[i][j] != 0:
46+
edges.append( (self._vertexList[i].name, self._vertexList[j].name) )
47+
return edges
48+
49+
50+
def _getIndex(self,s):
51+
index = 0
52+
for name in (vertex.name for vertex in self._vertexList):
53+
if s == name:
54+
return index
55+
index += 1
56+
return None
57+
58+
59+
def insertVertex(self,name):
60+
if name in (vertex.name for vertex in self._vertexList): ########
61+
print("Vertex with this name already present in the graph")
62+
return
63+
self._vertexList.append( Vertex(name) )
64+
self._n += 1
65+
66+
67+
def removeVertex(self,name):
68+
u = self._getIndex(name)
69+
if u is None:
70+
print("Vertex not present in the graph")
71+
return
72+
73+
self._adj.pop(u)
74+
75+
for i in range(self._n):
76+
self._adj[i].pop(u)
77+
78+
self._vertexList.pop(u)
79+
self._n -= 1
80+
81+
82+
def insertEdge(self, s1, s2):
83+
u = self._getIndex(s1)
84+
v = self._getIndex(s2)
85+
if u is None:
86+
print("Start vertex not present in the graph, first insert the start vertex")
87+
elif v is None:
88+
print("End vertex not present in the graph, first insert the end vertex")
89+
elif u == v:
90+
print("Not a valid edge")
91+
elif self._adj[u][v] != 0 :
92+
print("Edge already present in the graph")
93+
else:
94+
self._adj[u][v] = 1
95+
96+
97+
def removeEdge(self, s1,s2):
98+
u = self._getIndex(s1)
99+
v = self._getIndex(s2)
100+
if u is None:
101+
print("Start vertex not present in the graph")
102+
elif v is None:
103+
print("End vertex not present in the graph")
104+
elif self._adj[u][v] == 0:
105+
print("Edge not present in the graph")
106+
else:
107+
self._adj[u][v] = 0
108+
109+
110+
def isAdjacent(self, s1, s2):
111+
u = self._getIndex(s1)
112+
v = self._getIndex(s2)
113+
if u is None:
114+
print("Start vertex not present in the graph")
115+
return False
116+
elif v is None:
117+
print("End vertex not present in the graph")
118+
return False
119+
return False if self._adj[u][v] == 0 else True
120+
121+
122+
def outdegree(self, s):
123+
u = self._getIndex(s)
124+
if u is None:
125+
print("Vertex not present in the graph")
126+
return
127+
128+
outd = 0
129+
for v in range(self._n):
130+
if self._adj[u][v] != 0 :
131+
outd+=1
132+
return outd
133+
134+
135+
def indegree(self, s):
136+
u = self._getIndex(s)
137+
if u is None:
138+
print("Vertex not present in the graph")
139+
return
140+
141+
ind = 0
142+
143+
for v in range(self._n):
144+
if self._adj[v][u] != 0 :
145+
ind+=1
146+
return ind
147+
148+
def findPathMatrix(self):
149+
150+
x = [ [None for column in range(self._n)] for row in range(self._n) ]
151+
152+
adjp = [ [None for column in range(self._n)] for row in range(self._n) ]
153+
temp = [ [None for column in range(self._n)] for row in range(self._n) ]
154+
155+
for i in range(self._n):
156+
for j in range(self._n):
157+
x[i][j] = adjp[i][j] = self._adj[i][j]
158+
159+
for p in range(2, self._n+1):
160+
161+
for i in range(self._n):
162+
for j in range(self._n):
163+
temp[i][j] = 0
164+
for k in range(self._n):
165+
temp[i][j] = temp[i][j] + adjp[i][k] * self._adj[k][j]
166+
167+
for i in range(self._n):
168+
for j in range(self._n):
169+
adjp[i][j] = temp[i][j]
170+
171+
for i in range(self._n):
172+
for j in range(self._n):
173+
x[i][j] = x[i][j] + adjp[i][j]
174+
175+
176+
#Display x
177+
for i in range(self._n):
178+
for j in range(self._n):
179+
print(x[i][j],end=" ")
180+
print()
181+
182+
print()
183+
184+
185+
for i in range(self._n):
186+
for j in range(self._n):
187+
if x[i][j] != 0:
188+
x[i][j] = 1
189+
190+
#Display Path Matrix
191+
for i in range(self._n):
192+
for j in range(self._n):
193+
print(x[i][j],end=" ")
194+
print()
195+
196+
197+
if __name__ == '__main__':
198+
199+
g1 = DirectedGraph()
200+
201+
g1.insertVertex("Zero")
202+
g1.insertVertex("One")
203+
g1.insertVertex("Two")
204+
g1.insertVertex("Three")
205+
206+
g1.insertEdge("Zero","One")
207+
g1.insertEdge("Zero","Three")
208+
g1.insertEdge("One","Two")
209+
g1.insertEdge("One","Three")
210+
g1.insertEdge("Three","Two")
211+
g1.findPathMatrix()
212+
213+
print()
214+
215+
g2 = DirectedGraph()
216+
217+
g2.insertVertex("Zero")
218+
g2.insertVertex("One")
219+
g2.insertVertex("Two")
220+
g2.insertVertex("Three")
221+
222+
g2.insertEdge("Zero","One")
223+
g2.insertEdge("Zero","Three")
224+
g2.insertEdge("One","Two")
225+
g2.insertEdge("One","Three")
226+
g2.insertEdge("Two","Zero")
227+
g2.insertEdge("Three","Two")
228+
g2.findPathMatrix()
229+
230+
print()
231+
232+
233+

0 commit comments

Comments
(0)

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