일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MySQL
- localstorage
- 그래프 탐색
- Github
- router
- DP
- 그리디
- trie
- Next
- vector insert
- 자바스크립트
- 백준 9527번
- branch
- 트라이
- pm2
- 게임 서버 아키텍처
- HTTP
- map
- ERD
- 이분 탐색
- Express.js
- string
- Prisma
- MongoDB
- insomnia
- PROJECT
- Keys
- html5
- ccw 알고리즘
- JavaScript
Archives
- Today
- Total
dh_0e
[PS] 뱀과 사다리 게임 / C++ (백준 16928번) 본문
BFS로 풀 수 있는 간단한 문제
greedy 방식이 왜 항상 최적의 값을 찾을 수 없는지 알려주기 좋은 문제같다.
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int d[101], vi[101];
queue<pair<int, int>> que;
int f(int cur, int c) {
for (int i = 1; i <= 6; i++) {
if (cur + i <= 100 && d[cur + i] == 0 && vi[cur + i] == 0) {
que.push(make_pair(cur + i, c + 1));
vi[cur + i] = 1;
}
else if(cur + i <= 100 && vi[d[cur+i]]==0){
que.push(make_pair(d[cur + i], c + 1));
vi[d[cur + i]] = 1;
}
}
return 0;
}
int main()
{
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < n + m; i++) {
int ori, des;
scanf("%d %d", &ori, &des);
d[ori] = des;
}
f(1, 0);
while (1) {
pair<int, int> pa = que.front();
que.pop();
if (pa.first == 100) {
printf("%d\n", pa.second);
break;
}
f(pa.first, pa.second);
}
return 0;
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[PS] 후위 표기식 / C++ (백준 1918번) (0) | 2025.04.20 |
---|---|
[PS] 공항 / C++ (백준 10775번) (0) | 2025.04.11 |
[PS] 너 봄에는 캡사이신이 맛있단다 / C++ (백준 15824번) (0) | 2025.04.02 |
[PS] 박성원 / C++ (백준 1086번) (0) | 2025.03.25 |
[PS] 두 배열의 합 / C++ (백준 2143번) (0) | 2025.03.20 |