문제 조건


input

output

문제 해석


코드


#include <string>
#include <vector>
#include <queue>

using namespace std;

vector<int> solution(int n, vector<vector<int>> roads, vector<int> sources, int destination) {
    vector<int> answer;
    vector<vector<int>> g(n+1); // 간선 정보를 graph로 변환
    vector<int> distances(n+1, -1); // 거리 정보를 기록할 vector
                                    // 초기값은 -1로 설정
                                    // 1. 갈 수 없는 경로에 대한 고려
                                    // 2. 아직 방문하지 않은 노드 처리
    
    // 그래프 변환
    for (auto r : roads) {
        g[r[0]].push_back(r[1]);
        g[r[1]].push_back(r[0]);
    }
    
    queue<int> q;
    q.push(destination); // 도착지점부터 역으로 연산
                         // 도착 지점에서 sources[i]에 갈 수 없다면, -1로 남아있을 것임
                         // 갈 수 있다면 방문할 때마다 level+1 해주면서 경로 탐색
    distances[destination] = 0; // 자기 자신이 도착 지점에 이미 위치할 수 있음

    while (!q.empty()) {
        int s = q.front();
        q.pop();
            
        for (auto n : g[s]) {
            if (distances[n] == -1) { // 방문하지 않은 노드 처리
                distances[n] = distances[s] + 1;
                q.push(n);
            }
        }
    }
    
    // BFS로 탐색 완료 후, 거리를 정답 양식에 맞게 수정
    for (auto source : sources) {
        answer.push_back(distances[source]);
    }
    
    return answer;
}