Skip to content

Commit 7cdc45c

Browse files
Merge pull request steam-bell-92#1567 from Facelessism/tsp
refactor the TSP solving functions
2 parents 66c378a + e122f36 commit 7cdc45c

1 file changed

Lines changed: 33 additions & 15 deletions

File tree

utilities/TSP-Visualizer/TSP-Visualizer.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ def draw_nodes(win, nodes, order=[], current_edge=None, best_dist=0):
6262
pygame.display.update()
6363

6464
def solve_nearest_neighbor(nodes):
65-
if len(nodes) < 2: return
66-
65+
if len(nodes) < 2:
66+
return [], 0
67+
6768
unvisited = list(range(1, len(nodes)))
6869
current = 0
6970
order = [0]
@@ -78,20 +79,29 @@ def solve_nearest_neighbor(nodes):
7879
nearest = min(unvisited, key=lambda x: get_distance(nodes[current], nodes[x]))
7980

8081
# Animate the connection being tested
81-
draw_nodes(WIN, nodes, order, current_edge=(nodes[current], nodes[nearest]), best_dist=path_distance(nodes, order))
82+
draw_nodes(
83+
WIN,
84+
nodes,
85+
order,
86+
current_edge=(nodes[current], nodes[nearest]),
87+
best_dist=path_distance(nodes, order)
88+
)
8289
pygame.time.delay(100)
8390

8491
order.append(nearest)
8592
unvisited.remove(nearest)
8693
current = nearest
8794

88-
draw_nodes(WIN, nodes, order, best_dist=path_distance(nodes, order))
89-
95+
best_dist = path_distance(nodes, order)
96+
draw_nodes(WIN, nodes, order, best_dist=best_dist)
97+
return order, best_dist
98+
9099
def solve_brute_force(nodes):
91-
if len(nodes) < 2: return
100+
if len(nodes) < 2:
101+
return [], 0
92102
if len(nodes) > 10:
93103
print("Too many nodes for brute force! (Max 10 recommended)")
94-
return
104+
return [], 0
95105

96106
min_dist = float('inf')
97107
best_order = []
@@ -112,12 +122,19 @@ def solve_brute_force(nodes):
112122
if dist < min_dist:
113123
min_dist = dist
114124
best_order = current_order
115-
125+
116126
count += 1
117-
if count % max(1, total // 100) == 0: # animate periodically
118-
draw_nodes(WIN, nodes, best_order, current_edge=(nodes[current_order[-1]], nodes[current_order[0]]), best_dist=min_dist)
119-
127+
if count % max(1, total // 100) == 0:
128+
draw_nodes(
129+
WIN,
130+
nodes,
131+
best_order,
132+
current_edge=(nodes[current_order[-1]], nodes[current_order[0]]),
133+
best_dist=min_dist
134+
)
135+
120136
draw_nodes(WIN, nodes, best_order, best_dist=min_dist)
137+
return best_order, min_dist
121138

122139
def main():
123140
nodes = []
@@ -142,7 +159,7 @@ def main():
142159
if event.key == pygame.K_c:
143160
nodes = []
144161
order = []
145-
best_dist = 0
162+
best_dist = 0
146163
elif event.key == pygame.K_r:
147164
nodes = []
148165
for _ in range(10):
@@ -153,17 +170,18 @@ def main():
153170
best_dist = 0
154171
elif event.key == pygame.K_1:
155172
if len(nodes) > 1:
156-
solve_nearest_neighbor(nodes)
173+
order, best_dist = solve_nearest_neighbor(nodes
174+
157175
elif event.key == pygame.K_2:
158176
if len(nodes) > 1:
159177
if len(nodes) > 10:
160178
draw_text(WIN, "Too many nodes for Brute Force! Use <= 10.", 10, 100, RED)
161179
pygame.display.update()
162180
pygame.time.delay(2000)
163181
else:
164-
solve_brute_force(nodes)
182+
order, best_dist = solve_brute_force(nodes
165183

166184
pygame.quit()
167-
185+
168186
if __name__ == "__main__":
169187
main()

0 commit comments

Comments
 (0)