Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가장 긴 증가하는 부분 수열
- 인덱스 트리
- C++ 17071
- strtok
- 백준
- DP
- C++1967
- 소트 게임
- 백준 17071
- LIS
- Backtracking
- 백트래킹
- 투포인터
- DFS
- 16933
- C++
- 알고리즘
- c언어
- BFS
- C++1167
- 문자열
- 순열
- 조합론
- 프로그래머스
- C++ 1937
- 백준 숨바꼭질5
- 다익스트라
- 위상정렬
- 조합
- C++ 1918
Archives
- Today
- Total
블로그
[C++] 1260 : DFS와 BFS 본문
728x90
실버Ⅱ
제목대로 DFS와 BFS
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n;
int g[1001][1001] = { 0, };
int check1[1001] = { 0, };
int check2[1001] = { 0, };
void dfs(int here) {
if (check1[here]) return;
check1[here] = 1;
printf("%d ", here);
for (int next = 1; next <= n; next++)
if (g[here][next] == 1 && !check1[next])
dfs(next);
}
void bfs(int here) {
queue <int> q;
q.push(here);
check2[here] = 1;
//큐에 원소가 없을 때 까지 진행
while (!q.empty()) {
int f = q.front();
q.pop();
printf("%d ", f);
//i(노드들) 조사 들어감
for (int i = 1; i <= n; i++) {
//방금 꺼낸 노드랑 조사중인 노드랑 이어져 있고 아직 이 노드 탐색 안했다면
if (g[f][i] && !check2[i]) {
//탐색했다 표시해 주고
check2[i] = 1;
//큐에 넣어준다
q.push(i);
}
}
}
}
int main() {
int m, v;
scanf("%d%d%d", &n, &m, &v);
int a, b;
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
g[a][b] = 1;
g[b][a] = 1;
}
dfs(v);
printf("\n");
bfs(v);
}
DFS와 BFS의 정석!
BFS는 이걸로 처음 풀어봤다
큐에서 노드들을 뽑을 때 BFS를 정렬했던 순서대로 뽑으므로
큐에서 노드들을 뽑을 때 뽑은 노드를 출력하도록 했다
이제 BFS 문제들도 이걸 응용해서 풀어나가야겠다
익숙해질 때까지 시간이 걸리겠지?
'PS' 카테고리의 다른 글
[C++] 2468 : 안전 영역 (0) | 2021.02.02 |
---|---|
[C++] 2583 : 영역 구하기 (0) | 2021.02.02 |
[C++] 11724 : 연결 요소의 개수 (0) | 2021.01.31 |
[C++] 2606 : 바이러스 (0) | 2021.01.31 |
[C++] 1012 : 유기농 배추 (0) | 2021.01.30 |
Comments