๋๋ ๋ธ๋ฃจํธํฌ์ค ๋ฐฉ์์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค. ๊ทธ๊ฑฐ๋ฐ์ ์๊ฐ์ด ๋์ง ์์๋ค. ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํด๋ด์ผ ํ๋๋ฐ ๊ทธ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ๋ ์๊ณ ๋ฆฌ์ฆ ์ด๋ณด์ธ ๋์๊ฒ๋ ๋๋ฌด ์ด๋ ค์ ๋ค.
๋ชจ๋ ์์ด์ ํ์ํด์ผํ๋๋ฐ ์ด ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค. w[i][j]๊ฐ ๋์ i์์ j๋ก ๊ฐ๋ ๋น์ฉ์ด๋ผ๊ณ ํ์๊ธฐ ๋๋ฌธ์ w[i][i+1]๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฑฐ๋ฆฌ๋น์ฉ์ ์ธ์ผ์ง ๋ชจ๋ ๋์๋ฅผ ๊ฒฝ์ ํ ์ ์๋ค.
permutation์ ์ด์ฉํ์ฌ 0๋ถํฐ n-1๊น์ง์ ์๋ฅผ ์์ด๋ก ์ง๊ณ ๊ทธ ๊ฒฝ์ฐ์ ์๋ง๋ค์ ๋น์ฉ์ ๊ตฌํ๋ค.
์๋ฅผ ๋ค์ด ๋์๋ฅผ 0,1,2,3์ด ์๋ค๊ณ ํ ๋ perm = [3 1 2 0]์ด๋ผ๋ฉด 3->1 1->2 1->0์ผ๋ก ๊ฐ๋ ๋น์ฉ์ด๋ค. ๊ทธ๋ ๊ฒ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ํ์ํด๋ณธ ํ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ฉด ๋๋ค.
import itertools
n = int(input())
distance_cost = []
min_distance = float('inf');
for i in range(n):
input_list = list(map(int, input().split()))
distance_cost.append(input_list)
print(distance_cost)
points = [i for i in range(n)]
def sum_distance(perm):
distance = 0
for j in range(0, n - 1): # for๋ฌธ์ ๋๋ ๋์ ์ธ ๋์๋ฅผ ๋๋ค.
if distance_cost[perm[j]][perm[j + 1]] != 0: # ๊ฐ ์ ์๋ ๋์๋ง
distance += distance_cost[perm[j]][perm[j + 1]]
else:
return -1
if distance_cost[perm[-1]][perm[0]] != 0: # ์์์ ์ผ๋ก ๋์์ค๋ ๋น์ฉ
distance += distance_cost[perm[-1]][perm[0]]
else:
return -1
return distance
for i in itertools.permutations(points): # ์์ด๋ง๋ค ๋๋ค
perm = list(i)
result = sum_distance(perm)
if result != -1:
min_distance = min(min_distance, result)
print(min_distance)
'ALGORITHM' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DFS/BFS] ๋ฐฑ์ค 1260 ๋ฌธ์ ํ์ด (0) | 2020.10.26 |
---|---|
[์ด์งํ์] programmers ์ ๊ตญ ์ฌ์ฌ ๋ฌธ์ ํ์ด (0) | 2020.10.11 |
[Stack] ๋ฐฑ์ค 3986 ๋ฌธ์ ํ์ด (0) | 2020.09.19 |
[DP] ๋ฐฑ์ค 14501 ๋ฌธ์ ํ์ด (0) | 2020.09.16 |
[DP] ๋ฐฑ์ค 1463 ๋ฌธ์ ํ์ด (0) | 2020.09.15 |