알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 플로이드 워셜

2024. 10. 13. 21:02·ALGORITHM

08-6 플로이드-워셜

기능: 모든 노드 간에 최단 경로 탐색 (시작점 x)

특징

- 음수 가중치 에지가 있어도 수행할 수 있음 (음수 사이클은 있으면 안됨)

- 동적 계획법의 원리를 이용해서 알고리즘에 접근

시간 복잡도: O(v^3) -> 노드의 개수가 1000 이런식이면 쓰면 안됨

 

핵심 이론

A 노드에서 B 노드까지 최단 경로를 구했다면, 그 경로위에 K노드가 존재했을 때 그 부분 경로 역시 최단 거리임

전체의 최단 거리는 부분의 최단 거리의 합과 같음

D[s][e] = Math.min(D[s][e], D[s][k] + D[k][e]

 

1. 리스트를 선언하고 초기화하기

인접행렬로 선언 가능 (노드의 개수가 적을테니)

 

2. 최단 거리 리스트에 그래프 데이터 저장하기

 

3. 점화식으로 리스트 업데이트하기

점화식을 3중 for문의 형태로 반복

for 경유지 k에 관해 (1~N): # N는 노드의 개수
	for 출발 노드 s에 관해 (1~N):
    	for 도착 노드 e에 관해 (1~N):
        	D[s][e] = Math.min(D[s][k]+ D[k][e], D[s][e])

 

모든 쌍의 노드에 대한 최단거리 표현 (무한대는 갈 수 없는 거리)

 

코드

import sys
input = sys.stdin.readline

n = int(input())
v = int(input())

graph = [float('inf')] * (n+1) for _ in range(n+1)]

for _ in range(n):
	v1, v2, c = map(int, input().split())
    graph[v1][v2] = c

for i in range(1, n+1):
	graph[i][i] = 0
    
for k in range(1, n+1): # 경유할 점
	for i in range(1, n+1):
    	for j in range(1, n+1):
        	graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
반응형

'ALGORITHM' 카테고리의 다른 글

알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 61. 가장 빠른 버스 노선 구하기  (4) 2024.10.13
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 59. 타임머신으로 빨리 가기  (3) 2024.10.13
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 벨만포드  (3) 2024.10.13
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 56. 최단 경로 구하기  (4) 2024.10.13
프로그래머스 | 스택/큐 | 프로세스 (python)  (1) 2024.10.11
'ALGORITHM' 카테고리의 다른 글
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 61. 가장 빠른 버스 노선 구하기
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 59. 타임머신으로 빨리 가기
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 벨만포드
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 56. 최단 경로 구하기
진미
진미
  • 진미
    ABC
    진미
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • PROJECT (3)
      • ALGORITHM (43)
      • STUDY (3)
        • 리액트 (7)
        • 파이썬 (2)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 설정
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
진미
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 플로이드 워셜
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.