algorithms

Algorithm implementations
git clone git://git.laack.co/algorithms.git
Log | Files | Refs | README

commit eb3d1bbf66fea2c0503eff05415f677f6d040a95
parent 33414ff629f29f02711fe23b5223e5ac55d5e3d0
Author: Andrew Laack <andrew@laack.co>
Date:   Wed,  9 Sep 2026 20:34:00 -0500

Updated code to run forever and to output a nice background image.

Diffstat:
Mvisualizations/prim.py | 133++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 67 insertions(+), 66 deletions(-)

diff --git a/visualizations/prim.py b/visualizations/prim.py @@ -6,7 +6,7 @@ import math pygame.init() -display = pygame.display.set_mode((600,500)) +display = pygame.display.set_mode((5120,1440)) VERTICES = 100 EDGES = 200 @@ -43,80 +43,81 @@ class Edge(): return self.dist < otr.dist -graph = {} +while True: + graph = {} -for i in range(0,VERTICES): - x = random.random() * 597.5 - y = random.random() * 497.5 - graph[Vertex(x,y)] = [] + for i in range(0,VERTICES): + x = random.random() * 5120 + y = random.random() * 1440 + graph[Vertex(x,y)] = [] -edge_list = [] -for i in range(0,EDGES): - k1 = None - k2 = None - while k1 == k2: - k1 = random.choice(list(graph.keys())) - k2 = random.choice(list(graph.keys())) + edge_list = [] + for i in range(0,EDGES): + k1 = None + k2 = None + while k1 == k2: + k1 = random.choice(list(graph.keys())) + k2 = random.choice(list(graph.keys())) - edge = Edge(k1,k2) - graph[k1].append(edge) - graph[k2].append(edge) - edge_list.append(edge) + edge = Edge(k1,k2) + graph[k1].append(edge) + graph[k2].append(edge) + edge_list.append(edge) -edge_heap = [] -visited_vertices = set() + edge_heap = [] + visited_vertices = set() -mst = [] + mst = [] -while True: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - quit() - - display.fill(black) - - for vertex in graph: - vertex.draw_vertex(display) - - for edge in edge_list: - edge.draw_edge(display, light_grey) - - for edge in mst: - edge.draw_edge(display, white) - - - if len(edge_heap) == 0: - start = random.choice(list(graph.keys())) - visited_vertices.add(start) - edges = graph[start] - for edge in edges: - heapq.heappush(edge_heap, edge) - else: - item = None - while True: - if len(edge_heap) > 0: - item = heapq.heappop(edge_heap) - v1_visited = item.v1 in visited_vertices - v2_visited = item.v2 in visited_vertices - if v1_visited != v2_visited: - break - else: - item = None - break + while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + quit() - if item != None: - new_vertex = item.v2 if item.v1 in visited_vertices else item.v1 - visited_vertices.add(new_vertex) - new_vertex.visited = True - mst.append(item) - edges = graph[new_vertex] - for edge in edges: - heapq.heappush(edge_heap, edge) - time.sleep(.1) + display.fill(black) + + for vertex in graph: + vertex.draw_vertex(display) + for edge in edge_list: + edge.draw_edge(display, light_grey) + for edge in mst: + edge.draw_edge(display, white) - pygame.display.update() + + if len(edge_heap) == 0: + start = random.choice(list(graph.keys())) + visited_vertices.add(start) + edges = graph[start] + for edge in edges: + heapq.heappush(edge_heap, edge) + else: + item = None + while True: + if len(edge_heap) > 0: + item = heapq.heappop(edge_heap) + v1_visited = item.v1 in visited_vertices + v2_visited = item.v2 in visited_vertices + if v1_visited != v2_visited: + break + else: + item = None + break + + if item != None: + new_vertex = item.v2 if item.v1 in visited_vertices else item.v1 + visited_vertices.add(new_vertex) + new_vertex.visited = True + mst.append(item) + edges = graph[new_vertex] + for edge in edges: + heapq.heappush(edge_heap, edge) + else: + pygame.image.save(display, "out.jpg") + break + time.sleep(.1) + pygame.display.update()