[C++] 백준 2644 : 촌수계산

Kim Nahyeong·2022년 3월 13일
0

백준

목록 보기
104/157

#include <iostream>

int n, m;
int a, b;
int x, y;

int map[101][101]; // 최대 100명
bool visited[101] = {false}; // 방문여부

int cnt = -1; // 연결 촌수 없으면 -1
bool success = false;

void DFS(int a, int b, int tmp){
  visited[a] = true; // 방문 체크
  for(int i = 1; i <= n; i++){ // 1 ~ n 까지 범위 조심하기
    if(i == b && map[a][i] == 1){ // 촌수 있는 경우
      cnt = tmp + 1;
      success = true;
      return;
    }
    if(map[a][i] == 1 && !visited[i]){ // 연결 있고 방문되지 않은 경우
      DFS(i, b, tmp+1);
    }
  }
}
int main(int argc, char** argv){
  scanf("%d", &n);
  scanf("%d %d", &a, &b); // 촌수 계산

  scanf("%d", &m);
  for(int i = 0; i < m; i++){
    scanf("%d %d", &x, &y); // 부모 자식 관계 x : 부모, y : 자식
    map[x][y] = 1;
    map[y][x] = 1; // 그래프 간선 연결 (방향 x)
  }

  DFS(a, b, 0);

  if(success){
    printf("%d", cnt);
  } else {
    printf("-1");
  }

  return 0;
}

DFS 연습용 문제.
직관적으로 그래프를 그릴 수 있어서 생각보다 쉽게 생각해 볼 수 있었다.
이제 조금 더 익숙해진 느낌적인 느낌 느낌

0개의 댓글