-
반응형
1956번: 운동
첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의
www.acmicpc.net
-풀이-
플로이드 와샬 알고리즘을 이용하여 모든 도시에서 모든 도시로의 최소거리를 구해준다. 이때 사이클이 생기는것도 허용해야 하므로, i==j 일때 continue하는 조건을 삭제해준다.
알고리즘을 실행시킨 뒤, 자기가 있는 도시부터 자기가있는 도시까지의 거리중 최솟값( maze[i][i] , i는 1~V까지,) 를 구한다.
-시간복잡도-
플로이드와샬의 시간복잡도는 O(V3)이 된다.
-코드-
#include<iostream> #include<algorithm> #define MAX 987654321 using namespace std; int maze[401][401]; int v, e; int main() { cin >> v >> e; for (int i = 1; i <= v; i++) for (int j = 1; j <= v; j++) maze[i][j] = MAX; for (int i = 0; i < e; i++) { int a, b, c; cin >> a >> b >> c; maze[a][b] = c; } for (int k = 1; k <= v; k++) { for (int i = 1; i <= v; i++) { for (int j = 1; j <= v; j++) { if(i==k||j==k) continue; if (maze[i][j] > maze[i][k] + maze[k][j]) { maze[i][j] = maze[i][k] + maze[k][j]; } } } } int result = MAX; for (int i = 1; i <= v; i++) { result = min(result, maze[i][i]); } if (result == MAX) { cout << "-1\n"; } else { cout << result << "\n"; } return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 2268번 수들의 합 (0) 2021.05.19 [백준OJ] 얼음깨기 펭귄 (2) 2021.05.18 [백준OJ] 15641번 SUPER SUPER BINARY SEARCH DELUXE 2.5: THE LEGEND OF THE GOLDEN MAZASSUMNIDA, EPISODE 2: THE MAZWAETL UNIVERSE, PART 2: THE PARALLEL UNIVERSE AND THE LOST MAZASSUMNIDA: GAME OF THE YEAR EDITION (0) 2021.05.06 [백준OJ] 9657번 돌 게임 3 (0) 2021.05.04 [백준OJ] 20551번 SORT마스터 배지훈의 후계자 (0) 2021.05.02 댓글