본문 바로가기
C/알고리즘

Floyd Washall Algorithm(플로이드 와샬 알고리즘)

by 덤더리덤떰 2023. 8. 14.

1.플로이드 와샬 알고리즘

: 모든 정점에서 모든 정점으로의 최단 경로를 구하는 알고리즘

:2차원 배열 이용하여 계속적으로 비용 업데이트

cf> 다익스트라(Dijkstra Alogrithm)

:한 정점에서 출발했을 때 다른 모든 정점으로의 최단 경로

:1차원 배열 이용

#include <stdio.h>
#define INF 100000

void Floyd_Washall(int(*g)[4], int size) {
	int cost[4][4] = { 0 };
	int i, j,k;
	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++) {
			cost[i][j] = g[i][j];
		}
	}

	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++) {
			for (k = 0; k < size; k++) {
				if (j != i && k != i) {
					if (cost[j][k] > cost[j][i] + cost[i][k]) {
						cost[j][k] = cost[j][i] + cost[i][k];
					}
				}
			}
		}
	}

	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++) {
			printf("%3d ", cost[i][j]);
		}
		printf("\n");
	}
}

int main() {

	int graph[4][4] = { {0,5,INF,8},{7,0,9,INF},
		{2,INF,0,4},{INF,INF,3,0} };
	int size = sizeof(graph) / sizeof(graph[0]);

	Floyd_Washall(graph, size);





	getchar();
	return 0;
}

'C > 알고리즘' 카테고리의 다른 글

강한 결합 요소(Strongly Connected Components)  (0) 2023.08.15
위상정렬(Topology sort)  (0) 2023.08.14
Dijkstra Algorithm[C]  (0) 2023.08.11
kruskal algorithm[c]  (0) 2023.07.31
[C] 연결리스트 큐 이용한 기수정렬  (0) 2023.07.25