플로이드 와샬 2

#2458번 키 순서 (C++)

링크 : www.acmicpc.net/problem/2458 2458번: 키 순서 1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여 www.acmicpc.net 이 문제는 플로이드 와샬 알고리즘을 활용했다. 문제의 풀이는 다음과 같다. (1) 배열을 만든다. 이때 모든 노드들은 갈 수 없다고 먼저 선정해준다 (임의의 최대값 INF를 설정하여 값을 삽입) (2) 같은 노드에서 같은 노드로 가는 배열은 0으로 초기화한다 (ex: v[1][1]) (3) 배열의 값을 입력받고 채워준다. (4) floydwarshall DFS를 실행한다. #include #include..

플로이드 와샬 알고리즘

플로이드 - 워셜(와샬) 알고리즘 (Floyd-Warshall Algorithm) 동적 계획법에 속하는 알고리즘으로, 그래프에서 모든 꼭지점 사이의 최단 경로를 구하는 알고리즘이다. 음수 가중치를 갖는 간선도 순환만 없다면 문제없이 알고리즘이 동작된다. 3중 for문으로 구현되며, 구성은 다음과 같다. 가장 바깥쪽 for문 : 거쳐가는 꼭지점 두 번째 for문 : 출발 꼭지점 세 번째 for문 : 도착하는 꼭지점이다. 시간복잡도는 for문이 3개인 관계로 O(n^3)이다. for(int k = 0; k < n; ++k){ //거쳐가는 꼭지점 for(int i = 0; i < n; ++i){ //출발 꼭지점 for(int j = 0; j d[i][k] + d[k][j]){ d[i][j] = d[i][k] ..