친구가 기초 알고리즘 과외를 한다고 하는게 갑자기 생각남.
1, 2 강의에 BFS, DFS 기초 탐색 및 응용
3 강의에 DP
4 강의에 다익스트라
내 생각에는 날로 쳐먹으려는게 확실함
그냥 갑자기 생각나서 예전 기억 더듬으며 위 내용 복습 해보려고함.
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); }
'job sound' 카테고리의 다른 글
[알고리즘] 문제 풀이 주제별 관련 우선순위 (0) | 2017.05.11 |
---|---|
[C++] Dynamic Programming을 알아보자. (0) | 2017.05.11 |
[python] 크롤러를 만들어 크롤링을 해보자. (0) | 2017.05.11 |
[Windows] Windows 10 부팅(설치) 디스크를 만들어보자 (0) | 2017.04.17 |
[Ubuntu] Ubuntu 부팅(설치) 디스크를 만들어보자 (0) | 2017.04.10 |