You are on page 1of 4

#adjacency list

graph={}
def add_node(data):
if data in graph.keys():
print(f"{data} is already present!")
else:
graph[data]=[]

#undirected weighted graph


def add_edge_al(node1,node2,weight):
if node1 not in graph:
print(f"{node1} not present in graph!")
elif node2 not in graph.keys():
print(f"{node2} not present in graph!")
else:
list1=[node2,weight]#comment for directed
list2=[node1,weight]
graph[node1].append(list2)
graph[node2].append(list1)

#undirected unweighted
def add_edge_uw_al(node1,node2):
if node1 not in graph.keys():
print(f"{node1} not present in graph!")
elif node2 not in graph.keys():
print(f"{node2} not present in graph!")
else:
graph[node1].append(node2)#comment for directed
graph[node2].append(node1)

def delete_node(data):
if data not in graph.keys():
print(f"{data} not present in graph!")
else:
graph.pop(data)
for i in graph.values():
if data in i:
i.remove(data)

def delete_node_w(data):
if data not in graph.keys():
print(f"{data} not present in graph!")
else:
graph.pop(data)
for i in graph:
li=graph[i]
for j in li:
if data == j[0]:
li.remove(j)

def delete_edge(node1,node2):
if node1 not in graph.keys():
print(f"{node1} not present in graph!")
elif node2 not in graph.keys():
print(f"{node2} not present in graph!")
else:
if node1 in graph[node2]:
graph[node1].remove(node2)
graph[node2].remove(node1)
def DFS(data,visited,graph):
if data not in graph:
print(f"{data} not present in graph!")
else:
if data not in visited:
print(data,end=" ")
visited.add(data)

for i in graph[data]:
DFS(i,visited,graph)

visited=set()
add_node("A")
add_node("B")
add_node("C")
add_node("D")
add_node("E")
add_node("F")
add_node("G")
add_node("H")

#add_edge_al("A","B",10)
#add_edge_al("A","C",21)
add_edge_uw_al("A","B")
add_edge_uw_al("A","C")
add_edge_uw_al("A","D")
add_edge_uw_al("C","D")
add_edge_uw_al("B","D")
add_edge_uw_al("B","E")
add_edge_uw_al("D","E")

#delete_edge("A","B")
delete_node_w("B")
print(graph)
# DFS("A",visited,graph)
#DFS("B",visited,graph)
#DFS("C",visited,graph)

#adjacency matrix
node = []
graph = []
length_node = len(node)

def add(data):
global length_node
if data in node:
print(f"{data} is already in graph")
else:
length_node+=1
node.append(data)
for i in graph:
i.append(0)
temp=[]
for i in range(length_node):
temp.append(0)
graph.append(temp)
def print_matrix():
for i in range(length_node):
for j in range(length_node):
print(format (graph[i][j], "<5"),end=" ")
print()

#undirected weighted
def add_edge_am(node1,node2,weight):
if node1 not in node:
print(f"{node1} is not present")
elif node2 not in node:
print(f"{node2} is not present")
else:
index1=node.index(node1)
index2=node.index(node2)
graph[index1][index2]=weight
graph[index2][index1]=weight

#undirected unweighted
def add_edge_uw_am(node1,node2):
if node1 not in node:
print(f"{node1} is not present")
elif node2 not in node:
print(f"{node2} is not present")
else:
index1=node.index(node1)
index2=node.index(node2) #comment for directed
graph[index1][index2]=1
graph[index2][index1]=1 #comment for directed

def delete(data):
global length_node
if data not in node:
print(f"{data} is not in graph")
else:
index1=node.index(data)
node.remove(data)
length_node-=1
graph.pop(index1)
for i in graph:
i.pop(index1)

def delete_edge_am(node1,node2):
if node1 not in node:
print(f"{node1} is not present")
elif node2 not in node:
print(f"{node2} is not present")
else:
index1 = node.index(node1)
index2 = node.index(node2) # comment for directed
graph[index1][index2] = 0
graph[index2][index1] = 0 # comment for directed

add("A")
add("B")
add("C")
add("D")
print(" ")
# print(graph)
# print(node)
add_edge_am("A","C",50)
add_edge_am("D","B",25)
# add_edge("A","D")
# delete("B")
print_matrix()

You might also like