본문 바로가기

알고리즘 문제 풀이/Baekjoon

1389 - 케빈 베이컨의 6단계 법칙

반응형
SMALL

 

 

1389번: 케빈 베이컨의 6단계 법칙

첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻

www.acmicpc.net

#include <stdio.h>

const int MAX_F = 100;

int N, M;
int map[MAX_F + 10][MAX_F + 10];
int result[MAX_F + 10][MAX_F + 10];
int queue[MAX_F + 10][2];
int s, e;

void init() {
  scanf("%d %d", &N, &M);

  int s, e;

  for (int m = 0; m < M; ++m) {
    scanf("%d %d", &s, &e);
    map[s][e] = 1;
    map[e][s] = 1;
  }
}

void bfs(int n) {
  s = 0; e = 0;

  queue[e][0] = n;
  queue[e++][1] = 0;

  while (s <= e) {
    int node = queue[s][0];
    int cnt = queue[s++][1];

    for (int i = 1; i <= N; ++i) {
      if (n == i) { continue; }
      if (map[node][i] && result[n][i] == 0) {
        result[n][i] = cnt + 1;
        queue[e][0]= i;
        queue[e++][1] = cnt + 1;
      }
    }
  } 
}

void print() {
  int min = MAX_F * MAX_F;
  int R = 0;

  for (int i = 1; i <= N; ++i) {
    int sum = 0;

    for (int j = 1; j <= N; ++j) {
      sum += result[i][j];
    }

    if (min > sum) {
      min = sum;
      R = i;
    }
  }

  printf("%d", R);
}

int main(void) {
  //freopen("1389.txt", "r", stdin);

  init();


  for (int n = 1; n <= N; ++n) {
    bfs(n);
  }

  print();

  return 0;
}

 

오랜만에 푸니까 BFS 왤케 어렵냐 

반응형
LIST

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

9375 - 패션왕 신해빈  (1) 2024.01.02
2014 - 소수의 곱  (0) 2023.12.27
3006 - 터보소트  (1) 2023.12.27
1395 - 스위치  (1) 2023.12.26
1074 - Z  (0) 2023.12.24