티스토리 뷰
https://www.acmicpc.net/problem/1260
BFS와 DFS 기본 알고리즘 스크랩!
https://kmkidea.tistory.com/50
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
- C# java 차이점
- html꿀팁
- script버전
- 프론트엔드
- 선언적트랜잭션 #noRollbackFor #@Transactional
- C++
- 런타임에러
- html
- 캐시삭제
- 백준
- 백준14501
- boj
- 퇴사
- 프론트엔드개발자
- 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 |