티스토리 뷰
코드
1) pair 이용
현재 위치와 해당 위치까지 이동하는 데 걸린 시간을 함께 저장하기 위해 pair를 이용한다.
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
|
#include <iostream>
#include <queue>
using namespace std;
int bfs(int s, int e) {
bool visit[100001] = { false }; // 왔던 곳에 중복해서 가는 경우를 피하기 위해
queue<pair<int, int>> q; // 현재 위치, 걸린 시간
q.push({ s,0 }); // 맨 처음의 위치, 시간을 큐에 넣음
while (!q.empty()) {
pair<int, int> now = q.front(); // 현재위치 걸린 시간
visit[now.first] = true; // 방문 표시
q.pop();
if (now.first == e) // 도착한 경우 걸린 시간 리턴 후 종료
return now.second;
if (now.first-1 >= 0 && !visit[now.first - 1])
q.push({ now.first - 1, now.second+1 }); // X서 X-1로 이동. 시간 1 증가
if (now.first + 1 <= 100000 && !visit[now.first + 1])
q.push({ now.first + 1, now.second+1 }); // X서 X+1로 이동. 시간 1 증가
if (now.first * 2 <= 100000 && !visit[now.first * 2])
q.push({ now.first * 2, now.second+1 }); // X서 X * 2로 이동. 시간 1 증가
}
}
int main() {
int start, end;
cin >> start >> end;
cout << bfs(start, end) << endl;
}
|
cs |
2) pair 없이 bfs
while문 내에 for문을 둬 같은 시간일 때의 위치이동은 한번에 처리
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 | #include <iostream> #include <queue> using namespace std; int bfs(int s, int e) { bool visit[100001] = { false }; // 왔던 곳에 중복해서 가는 경우를 피하기 위해 queue<int> q; // 이동했던 위치를 담는 큐 q.push(s); // 맨 처음의 위치를 큐에 넣음 int time = 0; // 맨 처음 시간 while (!q.empty()) { int size = q.size(); while(size--){ int now = q.front(); // 현재위치 visit[now] = true; // 방문 표시 q.pop(); if (now == e) return time; // 도착한 경우 걸린 시간 리턴 후 종료 if (now-1 >= 0 && !visit[now - 1]) q.push(now - 1); // X서 X-1로 이동. if (now + 1 <= 100000 && !visit[now + 1]) q.push(now + 1); // X서 X+1로 이동. 시간 1 증가 if (now * 2 <= 100000 && !visit[now * 2]) q.push(now * 2); // X서 X * 2로 이동. 시간 1 증가 } time++; // 시간 증가 } } int main() { int start, end; cin >> start >> end; cout << bfs(start, end) << endl; } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[C++/백트래킹] 백준 2580 스도쿠 (0) | 2019.11.13 |
---|---|
[C++/BFS] 백준 3184 양 (0) | 2019.07.08 |
[C++/DP] 백준 1463 1로 만들기 (0) | 2019.07.01 |
[C++/BFS] 백준 9019 DSLR (0) | 2019.03.31 |
[C++/BFS] 백준 2667 단지 번호 붙이기 (0) | 2019.03.31 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ESP8266
- mysql
- 합승 택시 요금
- 2981
- the pads
- 블루투스
- git
- 라즈비안
- 구슬 탈출2
- 리눅스
- 집배원 한상덕
- 키 순서
- 스티커모으기2
- 프로그래머스
- DP
- hackerrank
- dovecot
- 메일서버
- dht11
- BFS
- 라즈베리파이
- 워드프레스
- 백준
- 아두이노
- c++
- java
- 자바
- 11503
- hc-06
- FTP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함