티스토리 뷰

반응형

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색
  • 깊이 우선 탐색

 


 

⊙ 문제 접근 과정

 

BFS 문제이다. 시작 값을 bfs() 함수에 넣고 방문할 때마다 값을 하나씩 올려준다.

그리고 마지막에 목표값에 대해 출력하면 된다.


 

⊙ 문제 풀이

 

#include <iostream>
#include <queue>

using namespace std;
#define MAX 102

int n,target_x,target_y,m;
int cnt=0;
int arr[MAX][MAX];
int visited[MAX];
queue<int> q;

void bfs(int k) {
    q.push(k);

    while(!q.empty()) {
        k = q.front();
        q.pop();
        for(auto i=1;i<=n;i++) {
            if(arr[k][i]!=0 && !visited[i]) {
                q.push(i);
                visited[i]=visited[k]+1; 
            }
        }
    }
}

int main() {
    cin >> n;
    cin >> target_x >> target_y;
    cin >> m;

    for(int i=0;i<m;i++) {
        int x,y;
        cin >> x >> y;
        arr[x][y]=1;
        arr[y][x]=1;
    }

    bfs(target_x);

    if(visited[target_y]==0)
        visited[target_y]=-1;
        
    cout << visited[target_y];
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함