1
1
#!/usr/bin/env python3
2
2
3
+
3
4
def tsp (distances : list [list [int ]]) -> int :
4
5
"""
5
6
Solves the Travelling Salesman Problem (TSP)
6
7
using dynamic programming and bitmasking.
7
8
Args:
8
- distances: 2D list where distances[i][j]
9
+ distances: 2D list where distances[i][j]
9
10
is the distance between city i and city j.
10
11
Returns:
11
12
Minimum cost to complete the tour visiting all cities.
@@ -17,7 +18,7 @@ def tsp(distances: list[list[int]]) -> int:
17
18
>>> tsp([[0, 29, 20, 21], [29, 0, 15, 17], [20, 15, 0, 28],
18
19
[21, 17, 28, 0]])
19
20
69
20
- >>> tsp([[0, 10, -15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]])
21
+ >>> tsp([[0, 10, -15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]])
21
22
# doctest: +ELLIPSIS
22
23
Traceback (most recent call last):
23
24
...
@@ -46,7 +47,11 @@ def visit(city: int, mask: int) -> int:
46
47
min_cost = min (min_cost , new_cost )
47
48
memo [city ][mask ] = min_cost # Store result in the memoization table
48
49
return min_cost
50
+
49
51
return visit (0 , 1 ) # Start from city 0 with city 0 visited
52
+
53
+
50
54
if __name__ == "__main__" :
51
55
import doctest
56
+
52
57
doctest .testmod ()
0 commit comments