ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ ๊ฐ ๋์์ ๋ํด ๊ฐ์ค์น๊ฐ ์ฃผ์ด์ง ๋ ๋ชจ๋ ๋์๋ฅผ ์ํํ๋, ์ต์ ๊ฐ์ผ๋ก ์ํํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ณดํต ์ด๋ฌํ ๋ฌธ์ ๋ DFS๋ฅผ ํตํด ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํด๋๊ณ , ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ํ์ํ๋ ๋ฐฉ์์ผ๋ก ํผ๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ 1 - 2 - 4 - 3 - 1
๊ณผ ๊ฐ์ ๋ฐฉ๋ฌธ ์์๋ฅผ ์์ด๋ก ๊ตฌํ ํ์ ๊ณ์ฐํ๋ ๋ฐฉ์๋ ์์ ์ ์๋ค.
ํ์ง๋ง ์์ด์ ๊ณ์ฐํ๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ต์ํ์ง ์์, DFS๋ก ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๊ณ , ์ฌ๊ท ํธ์ถ์ depth๊ฐ 0์ด ๋๋ฉด ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก์ ๊ฐ์ ๊ธฐ๋กํ๋๋ก ํ์๋ค. depth๊ฐ 0์ด ๋๋ค๋ ๊ฒ์ ๋ค์ ์์ ์ผ๋ก ๋์์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฝ๋
DFS๋ฅผ ์ด์ฉํ ํ์ด
from sys import stdin
def dfs(cur_node, cost):
global answer
if not cur_node and all(visited):
answer = \
cost if answer is None else min(answer, cost)
else:
for next_node in range(n):
if cities[cur_node][next_node] and not visited[next_node]:
visited[next_node] = True
dfs(next_node, cost + cities[cur_node][next_node])
visited[next_node] = False
if __name__ == '__main__':
answer = None
n = int(stdin.readline())
cities = [list(map(int, stdin.readline().split())) for _ in range(n)]
visited = [False] * n
dfs(0, 0)
print(answer)
Python3๋ก ์ ์ถํ ๊ฒฝ์ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. PyPy3๋ก ์ ์ถํ๋ฉด ์๊ฐ ๋ด์ ํต๊ณผํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1759 ์ํธ ๋ง๋ค๊ธฐ (0) | 2020.07.17 |
---|---|
๋ฐฑ์ค: 14501 ํด์ฌ (0) | 2020.07.16 |
๋ฐฑ์ค: 6603 ๋ก๋ (0) | 2020.07.15 |
๋ฐฑ์ค: 10819 ์ฐจ์ด๋ฅผ ์ต๋๋ก (0) | 2020.07.15 |
๋ฐฑ์ค: 10974 ๋ชจ๋ ์์ด (0) | 2020.07.15 |