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
- dfs
- 시뮬레이션
- 다이나믹 프로그래밍
- 삼성 기출
- koitp
- DP
- 에라토스테네스의 체
- 완전탐색
- C++
- PS
- 소수
- sw expert academy
- 구현
- 그리디
- 백트래킹
- 삼성 SDS 대학생 알고리즘 특강
- hackerrank
- 해커랭크
- BOJ
- 잠실
- 동적 계획법
- Algorithm
- BFS
- 브루트포스
- 스택
- 맛집
- SWEA
- dynamic programming
- 알고리즘
- 백준
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 1260 DFS와 BFS 본문
문제링크 : https://boj.kr/1260
가장 기본적인 DFS, BFS 문제이다.
시간초과 때문에 애먹었었는데.. 백준 사이트 자체 채점 시스템은 제약조건이 너무 많은 것 같다.
std::cin과 같은 것도 조심해야 하고 for each 구문도 조심해야 하는듯....
편하려고 STL을 사용하면 문제 생기는 부분이 좀 있는 것 같다.
1 2 3 4 5 6 7 8 9 10 11 | void dfs(int num){ if(!visited[num]) sort(node[num].begin(), node[num].end()); visited[num] = true; for(int i : node[num]) { if (!visited[i]) { cout << i << " "; dfs(i); } } } | cs |
처음에 이런 식으로 for(int i : node[num]) 로 작성했더니 시간초과가 나왔다.
sort의 문제인가 다른 최적화의 문제인가 고민하다가 일반 문장으로 바꾸니 해결되었다.
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 | // BOJ 1260 DFS와 BFS #include <bits/stdc++.h> using namespace std; vector<int> node[1001]; // 그래프 bool visited[1001]; // 방문 체크 queue<int> qq; // BFS용 큐 void dfs(int num){ if(!visited[num]) sort(node[num].begin(), node[num].end()); visited[num] = true; for(int i = 0; i < node[num].size(); i++) { int a = node[num][i]; if (!visited[a]) { cout << a << " "; dfs(a); } } } void bfs(int num){ qq.push(num); visited[num] = true; // 첫항 while(!qq.empty()){ int nn = qq.front(); qq.pop(); // poll if(!visited[nn]) sort(node[nn].begin(), node[nn].end()); for(int i = 0; i < node[nn].size(); i++){ int a = node[nn][i]; if(!visited[a]) { visited[a] = true; cout << a << " "; qq.push(a); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("../input.txt", "r", stdin); // 입력 int num, edg, ptr; cin >> num >> edg >> ptr; int a, b; for(int i = 0; i < edg; i++){ cin >> a >> b; // 양방향 그래프 만들기 node[a].push_back(b); node[b].push_back(a); } memset(visited, false, sizeof(visited)); cout << ptr << " "; dfs(ptr); cout << "\n"; memset(visited, false, sizeof(visited)); cout << ptr << " "; bfs(ptr); return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 백준 BOJ 11653 소인수분해 (0) | 2018.08.02 |
---|---|
1753 (0) | 2018.08.01 |
[C++] 백준 BOJ 2960 에라토스테네스의 체 (0) | 2018.07.31 |
[C++] 백준 BOJ 2252 줄 세우기 (0) | 2018.07.31 |
[C++] 백준 BOJ 1717 집합의 표현 (시간초과 해결) (0) | 2018.07.31 |
Comments