티스토리 뷰
https://www.acmicpc.net/problem/1260
BFS와 DFS 기본 알고리즘 스크랩!
https://kmkidea.tistory.com/50
[C++] BFS와 DFS
친구가 기초 알고리즘 과외를 한다고 하는게 갑자기 생각남. 1, 2 강의에 BFS, DFS 기초 탐색 및 응용 3 강의에 DP 4 강의에 다익스트라 내 생각에는 날로 쳐먹으려는게 확실함 그냥 갑자기 생각나서 예전 기억 더..
kmkidea.tistory.com
BFS ?
너비 우선 탐색
1) 시작 노드에서 자신의 자식 노드들을 모두 방문
2) 방문한 자식 노드 순서대로 1) 과정을 반복
DFS ?
깊이 우선 탐색
1) 시작 노드에서 자식 노드 중 1개를 방문
2) 방문한 자식 노드에서 1)을 반복 (만약 방문했었던 노드일 경우 재방문 안함)
3) 현재 노드에서 더 이상 방문할 노드가 없을 경우 부모 노드로 이동-> 1)반복
예제를 들어 보면..
C++ 구현해보자
#include<bits/stdc++.h>
using namespace std;
int n,m,v;
bool visit[1005];
vector<int> path[1005];
queue<int> q;
void dfs(int v){
for(int i=0;i<path[v].size();++i){
if(!visit[path[v][i]]){
visit[path[v][i]]=1;
printf("%d ",path[v][i]);
dfs(path[v][i]);
}
}
}
void bfs(int v){
for(int i=0;i<path[v].size();++i){
if(!visit[path[v][i]]){
q.push(path[v][i]);
visit[path[v][i]]=1;
}
}
while(!q.empty()){
int t = q.front();
q.pop();
printf("%d ",t);
bfs(t);
}
}
int main(){
int x,y;
scanf("%d%d%d",&n,&m,&v);
for(int i=0;i<m;++i){
scanf("%d%d",&x,&y);
path[x].push_back(y);
path[y].push_back(x);
}
for(int i=0;i<n;++i)
sort(path[i].begin(),path[i].end());
visit[v]=1;
printf("%d ",v);
dfs(v);
puts("");
memset(visit,0,sizeof(visit));
visit[v]=1;
printf("%d ",v);
bfs(v);
'Etc > BOJ' 카테고리의 다른 글
[BOJ/14501 퇴사]C++ 런타임 에러 이것을 꼭 확인하세요!! (0) | 2019.01.31 |
---|---|
[미로찾기 2178]런타임에러 원인-숫자로 배열만들기 (0) | 2018.04.12 |
[DSLR 9019] 런타임 에러 원인 (0) | 2018.03.21 |
[2007년 1924]첼러의 공식과 음수의 나머지 (0) | 2018.03.16 |
- Total
- Today
- Yesterday
- 프론트엔드
- boj
- C# java 차이점
- 런타임에러
- html
- 프론트엔드개발자
- 개발중캐시삭제
- 선언적트랜잭션 #noRollbackFor #@Transactional
- html꿀팁
- c#
- 백준퇴사
- 백준14501
- 퇴사
- 백준
- 캐시삭제
- script버전
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |