Cherry & Cherish

[Algo] 플로이드 워셜 문제풀이 본문

Algorithm/Learning

[Algo] 플로이드 워셜 문제풀이

앵도라지 2023. 2. 28. 20:28

플로이드 워셜 알고리즘

INF = int(1e9) #무한을 의미하는 값으로 10억을 설정#노드의 개수 및 간선의 개수를 입력받기
n = int(input())
m = int(input())
#2차원 리스트(그래프 표현)를 만들고, 모든 값으로 무한으로 초기화
graph = [[INF] * (n + 1) for _ in range(n + 1)]
​
#자기 자신에서 자기 자신으로 가는 비용은 0으로 초기화
for a in range(1, n + 1):
  for b in range(1, n + 1):
    if a == b:
      graph[a][b] = 0#각 간선에 대한 정보를 입력받아, 그 값으로 초기화
for _ in range(m):
  #A에서 B로 가는 비용은 C라고 설정
  a, b, c = map(int, input().split())
  graph[a][b] = c
​
#점화식에 따라 플로이드 워셜 알고리즘을 수행
for k in range(1, n + 1):
  for a in range(1, n + 1):
    for b in range(1, n + 1):
      graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
​
#수행된 결과를 출력
for a in range(1, n + 1):
  for b in range(1, n + 1):
    #도달할 수 없는 경우, 무한(INFINITY)이라고 출력
    if graph[a][b] == INF:
      print("INFINITY", end=" ")
    #도달할 수 잇는 경우 거리를 출력
    else:
      print(graph[a][b], end=" ")
  print()

백준 11403 경로 찾기

import sys
​
N = int(sys.stdin.readline())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
​
for k in range(N):
    for i in range(N):
        for j in range(N):
            if graph[i][k] and graph[k][j]:
                graph[i][j] = 1
​
for i in range(N):
    for j in range(N):
        print(graph[i][j], end=" ")
    print()

백준 11404 플로이드

import sys
INF = int(1e9)
​
n = int(sys.stdin.readline())  # 도시의 수
m = int(sys.stdin.readline())  # 버스의 수
​
graph = [[INF] * (n + 1) for _ in range(n + 1)] 
for i in range(1, n + 1):
    for j in range(1, n + 1):
        if i == j:
            graph[i][j] = 0
​
for _ in range(m):
    a, b, c = map(int, sys.stdin.readline().split())
    graph[a][b] = min(c, graph[a][b])   
​
for k in range(1, n + 1):
    for a in range(1, n + 1):
        for b in range(1, n + 1):
            graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
​
for a in range(1, n + 1):
    for b in range(1, n + 1):
        if graph[a][b] == INF:
            print("0",  end=" ")
        else:
            print(graph[a][b], end=" ")
    print()

'Algorithm > Learning' 카테고리의 다른 글

[Algo] 다익스트라 문제 풀이  (0) 2023.02.28
[Algo] 정렬 문제풀이 4  (1) 2023.02.27
[Algo] 정렬 문제풀이 3  (0) 2023.02.22
[Algo] 정렬 문제풀이 2  (0) 2023.02.18
[Algo] 정렬 문제풀이  (0) 2023.02.17
Comments