- 플로이드 워셜 알고리즘은 그래프에서 가능한 모든 노드 쌍에 대해 최단 거리를 구하는 알고리즘으로 시간복잡도는 O(V^3)이다.

- 특정 노드 사이의 간선이 없을 경우 INF로 표시하여 인접행렬을 만들 수 있다. ROUND를 반복하면서 인접행렬을 그린다. 노드간의 최단 거리로 인접행렬을 완성한다.

- 소스코드로 구현할 경우 3개의 FOR문으로 만들 수 있다.
먼저 초기 인접 행렬의 값을 사용해 노드 사이의 최단 거리 배열을 초기화한다.

for(int i = 1; i<=n; i++){
    for(int j =1; j<=n; j++){
        if (i == j) dist[i][j] = 0;
        else if (adj[i][j]) dist[i][j] = adj[i][j];
        else dist[i][j] = INF;
    }
}

이후 중간 노드가 될 노드 번호를 FOR문의 가장 바깥 변수로 잡고, 내부 이중 for문의 변수들을 통해 각 노드별 거리를 살펴보면서 k를 중간노드로 삼을때와 아닐때의 값을 비교한 후 더 작은 값으로 업데이트한다.

for(int k = 1; k<= n; k++){
    for(int i = 1; i <= n; i++){
        for(int j = 1; j<=n; j++){
            dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]);
        }
    }
}

'알고리즘 문제 > 알고리즘 이론' 카테고리의 다른 글

Java: List Sort  (0) 2024.06.17

+ Recent posts