이 코드에서 itertools 패키지의 permutation 함수를 alltours로 정의했습니다. 또한, 각 지점의 위치는 복소수(complex number)로 표현했습니다. 두 지점 간 위치의 차를 계산한 다음, 절댓값을 취하면 유클리드 거리를 구할 수 있습니다.
• generate_cities(n)을 실행하여 n개의 도시를 생성합니다.
• 두 도시 a와 b 사이의 거리는 distance_points(a, b)로 손쉽게 구할 수 있습니다.
다음은 brute_force 함수를 정의할 차례입니다. 이 함수는 모든 가능한 투어를 생성한 다음, 그 중에서 이동 거리가 가장 짧은 투어를 선택합니다.
[in :]
def brute_force(cities):
"모든 가능한 투어를 생성한 다음 이동 거리가 가장 짧은 투어를 선택합니다."
return shortest_tour(alltours(cities))
def shortest_tour(tours): return min(tours, key=distance_tour)
도시를 시각화할 유틸리티 함수를 구현합니다.
• visualize_tour: 모든 도시와 도시 간 연결선을 플롯에 그립니다. 또한, 투어를 시작한 도시에 별도의 표시를 남깁니다.
• visualize_segment: 도시와 연결선을 그리는 함수로, visualize_tour 함수에 의해 호출됩니다.