BFS and DFS
This commit is contained in:
65
graph.py
Normal file
65
graph.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from prettytable import PrettyTable
|
||||
from utils import *
|
||||
|
||||
class Node:
|
||||
|
||||
def __init__(self, name):
|
||||
self.parent = None
|
||||
self.name = name
|
||||
self.edges = []
|
||||
self.value = 0
|
||||
|
||||
class Edge:
|
||||
|
||||
def __init__(self, edge):
|
||||
self.start = edge[0]
|
||||
self.end = edge[1]
|
||||
self.value = edge[2]
|
||||
|
||||
|
||||
class Graph:
|
||||
|
||||
def __init__(self, node_list, edges):
|
||||
self.nodes = []
|
||||
for name in node_list:
|
||||
self.nodes.append(Node(name))
|
||||
|
||||
for e in edges:
|
||||
e = (getNode(e[0],self.nodes), getNode(e[1], self.nodes), e[2])
|
||||
|
||||
self.nodes[next((i for i,v in enumerate(self.nodes) if v.name == e[0].name), -1)].edges.append(Edge(e))
|
||||
self.nodes[next((i for i,v in enumerate(self.nodes) if v.name == e[1].name), -1)].edges.append(Edge((e[1], e[0], e[2])))
|
||||
|
||||
|
||||
def print(self):
|
||||
node_list = self.nodes
|
||||
|
||||
t = PrettyTable([' '] +[i.name for i in node_list])
|
||||
for node in node_list:
|
||||
edge_values = ['X'] * len(node_list)
|
||||
for edge in node.edges:
|
||||
edge_values[ next((i for i,e in enumerate(node_list) if e.name == edge.end.name) , -1)] = edge.value
|
||||
t.add_row([node.name] + edge_values)
|
||||
print(t)
|
||||
|
||||
class Queue:
|
||||
def __init__(self, type):
|
||||
self.type = type
|
||||
self.items = []
|
||||
|
||||
def empty(self):
|
||||
return len(self.items) == 0
|
||||
|
||||
def pop(self):
|
||||
if not self.empty():
|
||||
if self.type=='FIFO':
|
||||
return self.items.pop(0)
|
||||
else:
|
||||
return self.items.pop()
|
||||
return None
|
||||
|
||||
def push(self, node):
|
||||
self.items.append(node)
|
||||
if self.type=='PRIO':
|
||||
# Sorting reverse, because nodes with lowest cost/ value should be prioritized
|
||||
self.items.sort(key = lambda item: item.value, reverse=True)
|
||||
Reference in New Issue
Block a user