더북(TheBook)

이 코드에서 itertools 패키지의 permutation 함수를 alltours로 정의했습니다. 또한, 각 지점의 위치는 복소수(complex number)로 표현했습니다. 두 지점 간 위치의 차를 계산한 다음, 절댓값을 취하면 유클리드 거리를 구할 수 있습니다.

generate_cities(n)을 실행하여 n개의 도시를 생성합니다.

두 도시 ab 사이의 거리는 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 함수에 의해 호출됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.