반응형
https://www.acmicpc.net/problem/18352
#개요
bfs 를 사용해서 거리를 기록한 뒤에
같은 거리에 있는 도시들을
벡터에 넣어준 뒤에
하나씩 출력하면 된다.
#전체 코드
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M, K, X;
cin >> N >> M >> K >> X;
vector<vector<int>> graph(N+1);
for (int i = 0; i < M; i++) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
}
vector<bool> visited(N+1,false);
vector<int> dist(N+1, INT_MAX);
queue<int> q;
q.push(X);
visited[X] = true;
dist[X] = 0;
while (!q.empty()) {
int now = q.front();
q.pop();
for (auto edge : graph[now]) {
if (!visited[edge]) {
visited[edge] = true;
dist[edge] = dist[now] + 1;
q.push(edge);
}
}
}
vector<int> result;
for (int i = 1; i <= N; i++) {
if (dist[i] == K) {
result.push_back(i);
}
}
if (result.empty()) {
cout << "-1\n";
}
else {
sort(result.begin(), result.end());
for (int city : result) {
cout << city << '\n';
}
}
return 0;
}
출력만 좀 신경쓰면 될 것 같다
vector<int> result;
for (int i = 1; i <= N; i++) {
if (dist[i] == K) {
result.push_back(i);
}
}
if (result.empty()) {
cout << "-1\n";
}
else {
sort(result.begin(), result.end());
for (int city : result) {
cout << city << '\n';
}
}
반응형
'[백준] > C++' 카테고리의 다른 글
백준 1275번 커피숍2 [C++] (0) | 2024.06.16 |
---|---|
백준 27498번 연애 혁명 [C++] (0) | 2024.06.06 |
백준 9694번무엇을 아느냐가 아니라 누구를 아느냐가 문제다 [C++] (0) | 2024.05.11 |
백준 20056번 마법사 상어와 파이어볼 [C++]/삼성 SW역량 테스트 기출 문제 (0) | 2024.05.11 |
백준 14719번 빗물 [C++] (0) | 2024.05.09 |