Add Python notes

This commit is contained in:
2022-05-06 00:49:26 +03:00
parent 4c0cdb2f71
commit 1863176b39
57 changed files with 1205 additions and 5 deletions

View File

@@ -0,0 +1,122 @@
graph = {
1: {
2: 7,
3: 9,
6: 14
},
2: {
1: 7,
3: 10,
4: 15
},
3: {
1: 9,
2: 10,
4: 11,
6: 2
},
4: {
2: 15,
3: 11,
5: 6,
},
5: {
4: 6,
6: 9,
},
6: {
1: 14,
5: 9,
3: 2
}
}
class GraphPoint:
def __init__(self, graph, number, routes):
self.graph = graph
self.number = number
self.routes = routes
self.visited = False
self.minimum_range = 9999
def get_unvisited_neighbours(self):
neighbours = []
for number in self.routes.keys():
point = self.graph.get_point(number)
if not point.visited:
neighbours.append(point)
return neighbours
def get_range(self, point):
return self.routes[point.number]
def get_all_neighbours(self):
neighbours = [self.graph.get_point(x) for x in self.routes.keys()]
return neighbours
class Graph:
def __init__(self, data):
self.data = data
self.points = {}
for number, routes in data.items():
self.points[number] = GraphPoint(self, number, routes)
self.points[1].minimum_range = 0
def get_point(self, number):
point = self.points.get(number)
if point is None:
raise ValueError(f"Graph has no point with number {number}")
return point
myGraph = Graph(graph)
start = myGraph.get_point(1)
queue = []
queue.append(start)
while len(queue) > 0:
current_point = min(queue, key=lambda x: x.minimum_range)
queue.remove(current_point)
current_point.visited = True
for neighbour in current_point.get_unvisited_neighbours():
new_range = current_point.minimum_range + current_point.get_range(neighbour)
if new_range < neighbour.minimum_range:
neighbour.minimum_range = new_range
queue.append(neighbour)
path = []
pos = myGraph.get_point(5)
while pos != start:
for neighbour in pos.get_all_neighbours():
if neighbour.get_range(pos) + neighbour.minimum_range == pos.minimum_range:
path.append(pos)
pos = neighbour
break
path.append(start)
for i in path[::-1]:
print(i.number)
# No comments here. Good l_ck!