백준 1260번 : DFS와 BFS / C++
2023. 3. 14. 16:31ㆍ개인공부/코딩테스트
https://www.acmicpc.net/problem/1260
간선을 저장하는 방법에 대해서 여러가지 방법이 있을거 같은데 좀더 효율적으로 간선을 저장할 수 있는 방법을 생각해야겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#include <iostream>
#include <set>
#include <queue>
using namespace std;
int N, M, V;
set<int>* arr[1001]{};
bool DFSvisit[1001]{};
bool BFSvisit[1001]{};
void DFS(int index)
{
cout << index << ' ';
DFSvisit[index] = true;
for (auto iter = arr[index]->begin(); iter != arr[index]->end(); ++iter)
{
if (DFSvisit[*iter] == false)
DFS(*iter);
}
}
void BFS(int index)
{
queue<int> q;
q.push(index);
BFSvisit[index] = true;
cout << index << ' ';
while (!q.empty())
{
int f = q.front();
for (auto iter = arr[f]->begin(); iter != arr[f]->end(); ++iter)
{
if (BFSvisit[*iter] == false)
{
q.push(*iter);
BFSvisit[*iter] = true;
cout << *iter << ' ';
}
}
q.pop();
}
}
int main(void)
{
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
cin >> N >> M >> V;
for (int i = 1; i <= N; ++i)
arr[i] = new set<int>;
for (int i = 0; i < M; ++i)
{
int x1, x2;
cin >> x1 >> x2;
arr[x1]->insert(x2);
arr[x2]->insert(x1);
}
DFS(V);
cout << '\n';
BFS(V);
}
|
cs |
'개인공부 > 코딩테스트' 카테고리의 다른 글
백준 7575번 : 토마토 / C++ (0) | 2023.03.15 |
---|---|
백준 2178번 : 미로 탐색 / C++ (0) | 2023.03.15 |
백준 24479번: 알고리즘 수업-깊이 우선 탐색1 / C++ (0) | 2023.03.14 |
백준 17299번 : 오등큰수 / C++ (0) | 2023.03.14 |
백준 172938번: 오큰수 / C++ (0) | 2023.03.13 |