write a python program by implementing your own classes for
write a python program by implementing your own classes for Vertices, Edges and Graphs. create classes MyVertex,MyEdge,MyGraph(directed or un-directed) in the code.
general operations:
num vertices() - Return the number of vertices in graph G
num edges() - Return the number of edges in graph G
list vertices() - Return a list containing all vertices in G
list edges() - Return a list containing all edges in G
vertex(uidv) - Return some vertex ”v” in G
deg vertex(uidv) - Return the degree of a given vertex ”v” in G
incident edges(uidv) - Return a list of edgets incident upon some vertex ”v” in G
adjacent vertices(uidv) - Return a list of all vertices adjacent to a vertex ”v” in G
end vertices(uide) - Return the two end vertices of an edge ”e” in G
are adjacent(uidv, uidw) - Return whether two vertices ”v” and ”w” are adjacent in G
Operations on directed graph:
is directed(uide) - Indicate whether an edge ”e” is directed in G
in degree(uidv) - Return the in-degree of a vertex ”v”
incoming edges(uidv) - Return a list of the incoming edges incident on a vertex ”v” in G
outgoing edges(uidv) - Return a list of the outgoing edges incident on a vertex ”v” in G
adjacent incoming(uidv) - Return a list of all vertices adjacent to a vertex ”v” in G along incoming edges
adjacent outgoing(uidv) - Return a list of all vertices adjacent to a vertex ”v” in Galong outgoing edges
Update Methods:
new edge(uidv, uidw) - Insert a new directed or undirected edge between two vertices ”v” and ”w” in G
new vertex() - Insert a new isolated vertex into graph G
remove edge(uide) - Remove an edge ”e” from G
remove vertex(uidv) - Remove a vertex ”v” from G along with all its incident edges
Note: MyGraph,MyVertex,MyEdge classes should be created as classes not as Modules.
Solution
Please check this one.
class Graph:
 def __init__(slf,name=\"\"):
 slf.name = name
 slf.lst_nbr = {}
 slf.lst_nd = {}
 def add_node(slf,node):
 slf.lst_nd[node] = True
def add_edge(slf,node,nodebis):
 try :
 slf.lst_nbr[node].append(nodebis)
 except :
 slf.lst_nbr[node] = []
 slf.lst_nbr[node].append(nodebis)
 try :
 slf.lst_nbr[nodebis].append(node)
 except :
 slf.lst_nbr[nodebis] = []
 slf.lst_nbr[nodebis].append(node)
 def neighbors(slf,node):
 try :
 return slf.lst_nbr[node]
 except :
 return []
 def nodes(slf):
 return slf.lst_nd.keys()
 def delete_edge(slf,node,nodebis):
 slf.lst_nbr[node].remove(nodebis)
 slf.lst_nbr[nodebis].remove(node)
 def delete_node(slf,node):
 del slf.lst_nd[node]
 try :
 for nodebis in slf.lst_nbr[node] :
 slf.lst_nbr[nodebis].remove(node)
 del slf.lst_nbr[node]
 except :
 return \"error\"
if nmn == \"__main__\":
 G = Graph(\"test\")
 G.add_node(1)
 G.add_node(2)
 G.add_edge(1,2)
 print G.neighbors(1)


