8000 Merge pull request #405 from neppiness/1389_1 · REDICALED/basic-algo-lecture@bdde5af · GitHub
[go: up one dir, main page]

Skip to content

Commit bdde5af

Browse files
Merge pull request encrypted-def#405 from neppiness/1389_1
update: 0x18 1389_1.cpp
2 parents 5f7934d + 0fd7066 commit bdde5af

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

0x18/solutions/1389_1.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Authored by : scsc3204
2+
// Co-authored by : -
3+
// http://boj.kr/2c872055c09e448fa3250bcfb91d7513
4+
#include <bits/stdc++.h>
5+
using namespace std;
6+
7+
const int INF = 0x3f3f3f3f;
8+
int d[102][102];
9+
10+
int main(void) {
11+
ios::sync_with_stdio(0);
12+
cin.tie(0);
13+
14+
int n, m;
15+
cin >> n >> m;
16+
17+
for(int i = 1; i <= n; i++) {
18+
fill(d[i] + 1, d[i] + n + 1, INF);
19+
d[i][i] = 0;
20+
}
21+
int u, v;
22+
while(m--) {
23+
cin >> u >> v;
24+
d[u][v] = 1;
25+
d[v][u] = 1;
26+
}
27+
28+
for(int k = 1; k <= n; k++)
29+
for(int i = 1; i <= n; i++)
30+
for(int j = 1; j <= n; j++)
31+
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
32+
33+
int ans, sum;
34+
int min = INF;
35+
for(int i = 1; i <= n; i++) {
36+
sum = 0;
37+
for(int j = 1; j <= n; j++)
38+
sum += d[i][j];
39+
if(sum < min) {
40+
min = sum;
41+
ans = i;
42+
}
43+
}
44+
cout << ans;
45+
}
46+
/*
47+
플로이드-워셜 알고리즘을 활용한 풀이입니다.
48+
49+
간선 정보를 받아 u-v, v-u로 가는 경로의 길이가 1이라고 설정합니다.
50+
자기 자신으로 향하는 경로의 길이는 0으로 설정합니다.
51+
그외 모든 경로는 INF로 초기화하고 시작합니다.
52+
플로이드-워셜 알고리즘(28-31번째 줄)을 통해
53+
임의의 노드 i에서 j로 향하는 최단 거리를 2차원 배열 d에 계산합니다.
54+
55+
이후 한 노드 i에서 다른 노드 j로 향하는 모든 경로를 더한 값을 sum에 할당한 뒤
56+
최솟값과 비교합니다. 최솟값보다 작을 경우 sum을 갱신하고, 답을 i 노드로 갱신합니다.
57+
*/

0 commit comments

Comments
 (0)
0