반응형
250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Learning
- 삼성청년sw아카데미
- ssafy 7기 교수님
- SWEA
- React
- dfs
- 프로그래머스
- git
- 이코테
- 싸피 7기 입학식
- bfs
- 삼성 청년 SW 아카데미
- DenseNet
- SSAFY
- 코딩 교육
- SSAFYcial
- 알고리즘
- 코딩교육
- SSAFY 입학식
- 백준
- ssafy 7기
- pytorch
- SSAFY 8기
- 백준7576 bfs
- 유니온 파인드
- DP
- 전이학습
- 웹 표준 사이트 만들기
- 프로그래머스 고득점 kit
- ssafy 7기 합격
Archives
- Today
- Total
개미의 개열시미 프로그래밍
[알고리즘] 백준10971 외판원 순회2 - 파이썬 본문
728x90
반응형
https://www.acmicpc.net/problem/10971
[풀이 코드]
from sys import stdin
input = stdin.readline
N = int(input())
graph = []
for _ in range(N):
graph.append(list(map(int, input().split())))
def dfs(i):
if False not in visited:
result.append([sum(s), i])
for x in range(len(graph[i])):
if not visited[x] and graph[i][x] > 0: #방문한적없고 0이 아닌 경우
visited[x] = True
s.append(graph[i][x])
dfs(x)
s.pop()
visited[x] = False
sum_result = []
for start in range(N):
result = []
s = []
visited = [False] * N
visited[start] = True
dfs(start)
visited[start] = False
for total, end in result: # 마지막 방문 end -> start의 값도 더해준다.
if graph[end][start] != 0:
total += graph[end][start]
sum_result.append(total)
print(min(sum_result))
- 이동하는데 드는 비용이 2차원 행렬로 입력이 주어진다. dfs내에서 graph [x]!= 0 부분을 graph[i][x] > 0 로 고쳐주니 잘 작동했다.. 2차원 배열을 할 때마다 실수하는 것 같은데 주의해야겠다.
- 먼저, 맨 마지막 도시에서 처음 출발했던 도시로 돌아오는 부분을 마지막 for문에서 처리를 해주는데 이를 위해서 dfs함수 내에서 result함수에 마지막 방문 도시를 같이 append 해준다. 그리고 dfs탐색이 끝나면 마지막 도시에서 처음 도시로 이동하는 비용을 더해 총 구해진 비용 중 최솟값을 구한다.
728x90
반응형
'알고리즘 > DFS, BFS, 백트래킹' 카테고리의 다른 글
[알고리즘] 백준16932 모양만들기 - 파이썬 (0) | 2021.12.17 |
---|---|
[알고리즘] 백준16973 직사각형 탈출 - 파이썬 (0) | 2021.12.16 |
[알고리즘] 백준1182 부분수열의 합 - 파이썬 (0) | 2021.12.14 |
[알고리즘] 백준15649 N과 M (1) - 파이썬 (0) | 2021.12.13 |
[알고리즘]백준18513 샘터 - 파이썬 (0) | 2021.12.13 |
Comments