Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 시뮬레이션
- 파이썬
- 최소 신장 트리
- 우선순위큐
- 로봇 청소기
- 2019 KAKAO BLIND RECRUITMENT
- 투포인터
- 스택
- 비트마스킹
- 크루스칼
- 이분탐색
- 투 포인터
- 조합
- BFS
- 백트래킹
- SWEA
- GIT
- 브루트포스
- 플로이드와샬
- 트라이
- 다익스트라
- 2020 KAKAO BLIND RECRUITMENT
- 백준
- 프로그래머스
- 플로이드 와샬
- 2021 KAKAO BLIND RECRUITMENT
- Spring
- 2018 KAKAO BLIND RECRUITMENT
- 구현
- 2020 카카오 인턴십
Archives
- Today
- Total
개발조아
[BOJ/백준] 1719 택배 파이썬 본문
728x90
문제 링크 : https://www.acmicpc.net/problem/1719
문제에 모든 노드가 다 연결되어 있는지 만약 아니라면 그때의 출력은 어찌하는지가 없었다.
그래서 그냥 모든 노드가 연결되어 있다는 가정하에 문제를 풀었다.
나는 플로이드 와샬로 풀었다.
노드가 최대 200개 이므로 충분히 해결할 수 있다.
우선 인접 행렬로 구성했다.
배열[a][b] = [b,c]
a->b로 가는 최단 경로중 b를 가장 먼저 들러야하고 비용은 c이다 는 의미이다.
처음 입력은 저런식으로 초기화 해준다.
배열[b][a] = [a,c] 반대로 초기화 해주면 된다.
다음 플로이드 와샬을 돌리자.
작은 값으로 갱신할 때 배열[i][k] + 배열[k][j] 의 값으로 보통 바꿀 것이다.
이때 [i][k]가 더 먼저 방문한 노드가 된다.
from sys import stdin
input = stdin.readline
n,m = map(int, input().split())
INF = 9876543210
adj_mat = [[[INF,INF] for _ in range(n+1)] for _ in range(n+1)]
for _ in range(m):
a,b,c = map(int, input().split())
adj_mat[a][b] = [b,c]
adj_mat[b][a] = [a,c]
def solv():
for k in range(1,n+1):
for i in range(1,n+1):
for j in range(1,n+1):
if i == j:
adj_mat[i][j][0] = -1
else:
if adj_mat[i][j][1] > adj_mat[i][k][1] + adj_mat[k][j][1]:
adj_mat[i][j] =[adj_mat[i][k][0], adj_mat[i][k][1] + adj_mat[k][j][1]]
for row in adj_mat[1:]:
for before,cost in row[1:]:
if before == -1:
print('-',end=' ')
else:
print(before,end=' ')
print()
solv()
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 1662 압축 파이썬 (0) | 2021.09.19 |
---|---|
[BOJ/백준] 1162 도로포장 파이썬 (0) | 2021.09.17 |
[BOJ/백준] 네트워크 복구 파이썬 (0) | 2021.09.16 |
[BOJ/백준] 4485 녹색 옷 입은 애가 젤다지? 파이썬 (0) | 2021.09.16 |
[BOJ/백준] 16509 장군 파이썬 (0) | 2021.09.14 |
Comments