플로이드-와샬 알고리즘이란 ?

플로이드-와샬 알고리즘의 핵심

image.png

플로이드-와샬 소스 코드

public class FloydWarshall {
	
	static int number = 4; // 노드가 4개 
	static int INF = 10000000; // 무한대 
	
	// 초기 그래프 
	static int[][] graph = {
		{0, 5, INF, 8},
    {7, 0, 9, INF},
    {2, INF, 0, 4},
    {INF, INF, 3, 0}
  };
  
  public static void floydWarshall() {
  
	  // 결과 그래프 배열 초기화
	  int[][] result = new int[number][number];
	  
	  // 기존 그래프 복사를 결과 그래프에 복사
	  for (int i = 0; i < number; i++) {
		  for (int j = 0; j < number; j++) {
			  result[i][j] = graph[i][j];
			 }
	  }
	  
	  // k = 거쳐가는 노드
	  for (int k = 0; k < number; k++) {
		  // i = 출발 노드
		  for (int i = 0; i < number; i++) {
			  // j = 도착 노드
			  for (int j = 0; j < number; j++) {
				  if (result[i][k] + result[k][j] < result[i][j]) {
					  result[i][j] = result[i][k] + result[k][j];
					}
				}
			}
		}
		
		// 결과 출력 
		for (int i = 0; i < number; i++) {
        for (int j = 0; j < number; j++) {
             System.out.printf("%3d ", d[i][j]);
       }
         System.out.println();
    }
    
    public static void main(String[] args) {
        floydWarshall();
    }
}