박오이님
무미건조한 개발자
박오이님
전체 방문자
오늘
어제
  • 뭥미 (101)
    • 프로젝트 (8)
      • 자가 보호 (3)
      • 주식 시장 분석 도구 (5)
    • 보안 (7)
      • 개론 (2)
      • 웹 (2)
      • 시스템 (2)
    • 개발 (69)
      • C++ (12)
      • Win32 (7)
      • MFC (2)
      • 자료구조 (8)
      • 알고리즘 (22)
      • 백준 (9)
      • 프로그래머스 (4)
      • LeetCode (0)
      • 개발자 면접 준비 (4)
      • OpenGL (1)
    • 서적 (13)
      • Effective C++ (9)
      • Effective Modern C++ (4)
    • 관심사 (4)
      • 재테크 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 안경잡이개발자
  • 동빈나
  • 백준 #알고리즘 #플로이드와샬 #DFS #BFS #C #C++
  • C
  • C++
  • 윈도우프로그래밍
  • 최소간선비용
  • JSON
  • 플로이드와샬알고리즘 #최단경로 #백준 #알고리즘 #개발 #C #C++
  • 프로세스메모리
  • 코딩컨벤션
  • 윈도우개발자
  • 시스템프로그래밍
  • 알고리즘
  • 나동빈 #알고리즘 #동빈나
  • 개발
  • 에라토스테네스의 체 #C #C++ #개발 #알고리즘 #BFS #DFS #백준 #백준알고리즘
  • std
  • 윈도우
  • 윈도우시스템프로그래밍
  • 합집합찾기
  • DFS #BFS #알고리즘 #프로그래밍 #코딩테스트 #코딩 #C++ #C
  • Functional
  • jsoncpp
  • 에라토스테네스의 체 #알고리즘 #개발 #C #C++ #소수 #소수판별
  • vcpkg
  • 나동빈
  • EffectiveC++
  • 크루스칼알고리즘
  • CPP

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
박오이님

무미건조한 개발자

개발/알고리즘

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

2019. 9. 1. 21:01

다익스트라 알고리즘처럼 최단 경로 구하는 알고리즘이다.

 

차이점은, 모든 정점에서 모든 정점으로의 최단 경로를 구한다는 것.

--> 다익스트라 알고리즘은 따로 게시글을 포스트할 예정입니다.

 

플로이드 와샬 알고리즘은 기본적으로 '거쳐가는 정점'을 기준으로 알고리즘을 수행한다는 점.

그리고 플로이드 와샬 알고리즘은 기본적으로 다이나믹 프로그래밍 기술에 기반을 두고 있습니다.

 

코드를 보면, 초기 경로에 대한 값을 넣어 초기화해줍니다.

INF는 무한 값을 대체한 값입니다.

 

3중 for문으로 구현해, 최단 경로에 대한 비용을 갱신합니다.

 

#include <stdio.h>

int number = 4;
int INF = 10000000;

int a[4][4] = {
	{0, 5, INF, 8},
	{7, 0, 9, INF},
	{2, INF, 0, 4},
	{INF, INF, 3, 0},
};
void FloydWarshall()
{
	int d[4][4];

	for (int i = 0; i < number; i++)
	{
		for(int j = 0; j < number; j++)
		{
			d[i][j] = a[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 (d[i][k] + d[k][j] < d[i][j])
				{
					d[i][j] = d[i][k] + d[k][j];
				}
			}
		}
	}

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

}

int main(void)
{
	FloydWarshall();
	return 0;
}

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

합병 정렬(Merge sort)  (0) 2019.11.06
최소 스패닝 트리 (Minimum Spanning Tree, MST)  (0) 2019.10.08
에라토스테네스의 체  (0) 2019.09.01
다이나믹 프로그래밍(Dynamic Programming)  (0) 2019.07.04
크루스칼 알고리즘 (Kruskal Algorithm)  (0) 2019.07.03
    '개발/알고리즘' 카테고리의 다른 글
    • 합병 정렬(Merge sort)
    • 최소 스패닝 트리 (Minimum Spanning Tree, MST)
    • 에라토스테네스의 체
    • 다이나믹 프로그래밍(Dynamic Programming)
    박오이님
    박오이님
    긍정도 아니고 부정도 아닌 0

    티스토리툴바