#vertex
#vnum
#mat
#unconn=unconnection
#_name:protected variable,it is unvisiable for outer part except inhert part
#__name:private variable
#inherit
import pprint
class Graph:
def __init__(self,mat,unconn = 0):
vnum = len(mat)
for i in mat:
if len(i) != vnum:
raise Exception("Mat Error!")
self._mat = [mat[i][:] for i in range(vnum)]
self._unconn = unconn
self._vnum = vnum
def vertex_num(self):
return self._vnum
def add_vertex(self,v):
raise Exception("Not Support Add-Vertex!")
def vertex_invalid(self,v):
return 0>v or v>self._vnum
def add_edge(self,vi,vj,value = 1):
if self.vertex_invalid(vi) or self.vertex_invalid(vj):
raise Exception("Vertex Error!")
self._mat[vi][vj] = value
def get_edge(self,vi,vj):
if self.vertex_invalid(vi) or self.vertex_invalid(vj):
raise Exception("Vertex Error!")
return self._mat[vi][vj]
def out_edges(self,v):
edges = []
for i in range(self._mat[v]):
if i != self._unconn:
edges.append((i,self._mat[v][i]))
return edges
def get_whole_mat(self):
i = j = 0
for i in range(self._vnum):
for j in range(self._vnum):
print(self._mat[i][j],end = ' ')
print('')
if __name__ == "__main__":
#mat = [[1,1,1,0],[0,0,1,1],[0,1,1,1],[1,0,1,0]]
mat = [[0 for i in range(4)] for i in range(4)]
g = Graph(mat)
vertex_num = g.vertex_num()
print("vertex_num = ",vertex_num,end = '\n\n')
#g.add_vertex(1)
g.add_edge(1,2)
print("Adjacency Matrix:")
g.get_whole_mat()