문제접근
•
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++
복사