#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
// n: 정점의 개수, m: 간선의 개수
// v: 탐색을 시작할 정점의 번호
int n, m, v;
bool visited[1001];
pair<int, int> line[10001];
void dfs(int x) {
visited[x] = true;
cout << x << ' ';
for (int i = 0; i < m; ++i) {
if (x == line[i].first && !visited[line[i].second])
dfs(line[i].second);
else if (x == line[i].second && !visited[line[i].first])
dfs(line[i].first);
}
}
void bfs(int x) {
queue<int> q;
q.push(x);
visited[x] = true;
while (!q.empty()) {
int a = q.front();
cout << a << ' ';
q.pop();
for (int i = 0; i < m; ++i) {
if (a == line[i].first && !visited[line[i].second]) {
q.push(line[i].second);
visited[line[i].second] = true;
}
else if (a == line[i].second && !visited[line[i].first]) {
q.push(line[i].first);
visited[line[i].first] = true;
}
}
}
}
int main() {
cin >> n >> m >> v;
for (int i = 0; i < m; ++i) {
cin >> line[i].first >> line[i].second;
if (line[i].first > line[i].second)
swap(line[i].first, line[i].second);
}
sort(line, line + m);
dfs(v);
cout << endl;
for (int i = 0; i <= n; ++i)
visited[i] = false;
bfs(v);
return 0;
}
질문게시판의 15페이지까지 샅샅이 반례를 찾았지만
다 맞는걸로 나와서 대체 어디가 문제인지 알 수 없었던 문제..
다음날에 다시 푸니 어이없게도 for문의 범위가 문제였다..
(dfs와 bfs함수 내에 for문 범위를 간선의 개수로 설정했어야 하는데 정점의 개수로 설정)
for문의 범위는 잘 생각해보고 설정하자..ㅠ
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
'알고리즘 공부' 카테고리의 다른 글
백준 1012번 유기농 배추 (0) | 2023.03.10 |
---|---|
백준 2606번 바이러스 (0) | 2023.03.07 |
백준 1541번 일어버린 괄호 (0) | 2023.03.06 |
백준 1026번 보물 (0) | 2023.03.03 |
백준 11399번 ATM (0) | 2023.03.02 |