Search
Duplicate
📒

특정 거리의 도시 찾기

주차
문제번호
18352
언어
C++
티어
실버
유형
그래프
BFS
다익스트라
최단경로
nj_Blog
nj_상태
이해도
66%
풀이
사람
이해도 2
13 more properties

문제접근

bfs로 노드를 방문하면서 visited에 거리를 저장. 거리가 0인 지점만 계속적으로 방문하면서 k를 만났을때 answer에 저장

놓쳤던 부분

시작한 지점을 방문처리 안 해줘서 문제가 있었음

코드

21316 KB

348 ms

#include <iostream> #include <queue> #include <vector> #include <utility> #include <algorithm> using namespace std; int n, m, k, x; vector<vector<int>> city; vector<int> visited; vector<int> answer; void bfs(int cityNumber) { queue<int> q; q.push(cityNumber); while (!q.empty()) { int curNumber = q.front(); q.pop(); for (unsigned int i = 0; i < city[curNumber].size(); i++) { int nextNumber = city[curNumber][i]; if (visited[nextNumber] == 0 && nextNumber != x) { visited[nextNumber] = visited[curNumber] + 1; if (visited[nextNumber] == k) { answer.push_back(nextNumber); continue; } q.push(nextNumber); } } } } int main(void) { int input1, input2; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> k >> x; city.resize(n + 1); visited.resize(n + 1); for (int i = 0; i < m; i++) { cin >> input1 >> input2; city[input1].push_back(input2); } bfs(x); if (answer.size() == 0) cout << "-1"; else { sort(answer.begin(), answer.end()); for (unsigned int i = 0; i < answer.size(); i++) cout << answer[i] << "\n"; } return (0); }
C++
복사