본문 바로가기

코딩 테스트/최단 경로5

전보 p. 262 import sys import heapq input=sys.stdin.readline INF=int(1e9) # 도시의 개수, 통로의 개수, 출발 도시 n, m, c = map(int, input().split()) time=[INF] * (n+1) graph=[[] for _ in range(n+1)] for i in range(m): # 도시 x부터 도시 y까지 이어지는 통로가 있으며, 전달되는 시간은 z x,y,z=map(int, input().split()) graph[x].append((y,z)) def dijkstra(start): q=[] heapq.heappush(q, (0, start)) while q: dist, now = heapq.heappop(q) if dist > .. 2021. 3. 10.
미래 도시 import sys input=sys.stdin.readline INF=int(1e9) # 전체 회사 개수, 경로의 개수 n, m = map(int, input().split()) graph = [[INF]*(n+1) for _ in range(n+1)] for i in range(1, n+1): graph[i][i]=0 for i in range(m): a, b=map(int, input().split()) graph[a][b]=1 graph[b][a]=1 # 목적 노드, 거쳐가는 노드 x, k = map(int, input().split()) for _k in range(1, n+1): for a in range(1, n+1): for b in range(1, n+1): graph[a][b] = mi.. 2021. 3. 9.
플로이드 워셜 알고리즘 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 사용 단계마다 '거쳐가는 노드'를 기준으로 알고리즘 수행 최단 거리 테이블이 2차원 리스트이다. 점화식 import sys INF=int(1e9) input = sys.stdin.readline # 노드의 개수 및 간선의 개수 입력받기 n = int(input()) m = int(input()) # 2차원 리스트(그래프 표현)를 만들고, 모든 값을 무한으로 초기화 graph = [[INF]*(n+1) for _ in range(n+1)] # 자기 자신에서 자기 자신으로 가는 비용은 0으로 초기화 for i in range(1, n+1): graph[i][i] = 0 # 각 간선에 대한 정보를 입력받아, 그 값으로 초기화 for i i.. 2021. 3. 9.
다익스트라 최단 경로 알고리즘 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우 사용 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구함 '음의 간선'이 없을 때 동작 매번 '가장 비용이 적은 노드'를 선택해서 임의의 과정 반복' 중요하니 꼭 외울 것 1. 출발 노드 설정 2. 최단 거리 테이블 초기화 (1차원 리스트) 3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드 선택 4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블 갱신 5. 위 과정에서 3번과 4번 반복 방법 1. 간단한 다익스트라 알고리즘 import sys input=sys.stdin.readline INF=1e9 # 노드의 개수, 간선의 개수 입력받기 n,m=map.. 2021. 2. 28.
최단 경로 이론 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘, 길찾기 문제라고도 불림 다양한 유형이 존재(한지점에서 특정 지점까지 최단 경로, 모든 지점에서 다른 모든 지점까지 모든 최단경로 등) 그래프로 표현(지점-노드, 도로-간선) 그리디 알고리즘과 다이나믹 프로그래밍 알고리즘이 최단 경로 알고리즘에 그대로 적용된다. 다익스트라 최단 경로 알고리즘 플로이드 워셜 벨만 포드 알고리즘 2021. 2. 28.