Skip to content

Commit f9d2cff

Browse files
committed
[Silver I] 플로이드 워셜 알고리즘으로 각 유저의 케빈 베이컨의 수 계산
1 parent 9267456 commit f9d2cff

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
using namespace std;
4+
5+
#define INF 9999999
6+
7+
int adj[101][101] = { 0, };
8+
int kevinBacon[101] = {0, };
9+
10+
int main () {
11+
int N, M;
12+
cin>>N>>M;
13+
14+
for (int i=0;i<101;i++) { for (int j=0;j<101;j++) adj[i][j]=INF; } // 연결되지 않은 상태로 초기화
15+
16+
while (M--) {
17+
int a, b;
18+
cin>>a>>b;
19+
adj[a][b] = 1;
20+
adj[b][a] = 1; // 연결시켜줌
21+
}
22+
23+
for (int k=1; k<=N; k++) { // 경유하는 친구
24+
for (int i=1; i<=N; i++) {
25+
for (int j=1; j<=N; j++) {
26+
if (i!=j && j!=k && adj[i][j] > adj[i][k] + adj[k][j]) { // i와 j가 k에 의해 연결되어 있으면 (= INF 이상의 값이 나오지 않으면)
27+
adj[i][j] = adj[i][k] + adj[k][j]; // 연결되어 있으므로 몇 단계만에 갈 수 있는지 계산해 저장함
28+
adj[j][i] = adj[i][k] + adj[k][j];
29+
}
30+
}
31+
}
32+
}
33+
34+
int min = INF;
35+
int minUser = 0;
36+
37+
for (int i=1; i<=N; i++) {
38+
for (int j=1; j<=N; j++) {
39+
cout<<adj[i][j]<<" ";
40+
if (adj[i][j] < INF) kevinBacon[i] += adj[i][j];
41+
}
42+
cout<<"kevinBacon: "<<kevinBacon[i]<<endl;
43+
if (kevinBacon[i] < min) {
44+
min = kevinBacon[i];
45+
minUser = i;
46+
}
47+
}
48+
49+
cout<<minUser;
50+
}

0 commit comments

Comments
 (0)