본문 바로가기

알고리즘문제풀이

[백준 1389]케빈 베이컨의 6단계 법칙

반응형

문제 https://www.acmicpc.net/problem/1389


1)문제 분류 

-BFS

-DFS

-플로라이드 와샬 알고리즘 



2)문제 해결 

- Vector에 연결되어 있는 각 정점을 넣어서 연결고리를 만든다. 

- 각 BOG 유저의 케인베이컨의 수의 합을 알아야하기 때문에, 

   각 Bog유저마다, BFS를 돌려 케빈베이컨 수가 제일 적은 것을 선택한다. 


//12시 5분 ~12시 30분


#include<iostream>

#include<cstdio>

#include<vector>

#include<queue>

using namespace std;

int N, M;

vector<int>vt[102];

typedef struct Data

{

int x, cnt;

}Data;

int bfs(int start,int end)

{

bool chk[102][102] = { 0, };

queue<Data>pq;

pq.push({ start,0 });


while (!pq.empty())

{

Data output = pq.front();

pq.pop();


if (output.x == end)

{

return output.cnt;

}

for (int i = 0; i < vt[output.x].size(); i++)

{

if (chk[output.x][vt[output.x][i]] == false)

{

chk[output.x][vt[output.x][i]] = true;

pq.push({ vt[output.x][i] ,output.cnt + 1 });

}

}

}

}

int main()

{

scanf("%d %d", &N, &M);

int x, y;

for (int i = 0; i < M; i++)

{

scanf("%d %d", &x, &y);

vt[x].push_back(y);

vt[y].push_back(x);

}

int ans = 987654321;

int idx = 0;

for (int i = 1; i <= N; i++)

{

int sum = 0;

for (int j = 1; j <= N; j++)

{

if (i != j)

sum+=bfs(i, j);

}

if (sum < ans)

{

ans = sum;

idx = i;

}

}

printf("%d\n", idx);

}

  

반응형

'알고리즘문제풀이' 카테고리의 다른 글

[백준 1173]운동  (0) 2019.02.19
[백준 3109]빵집  (0) 2019.02.19
[백준 16930]달리기  (0) 2019.02.14
[백준 16929] Two Dots  (0) 2019.02.14
[백준 16928]뱀과 사다리 게임  (0) 2019.02.14