일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- PROJECT
- insomnia
- map
- HTTP
- ddl(data definition language)
- branch
- ERD
- JavaScript
- ccw 알고리즘
- 트라이
- Express.js
- Prisma
- trie
- Next
- MongoDB
- DP
- html5
- router
- string
- pm2
- 그래프 탐색
- 자바스크립트
- dcl(data control language)
- 게임 서버 아키텍처
- localstorage
- 이분 탐색
- 그리디
- Github
- MySQL
- Keys
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++ (백준 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 |
[PS] GCD(n, k) = 1 / C++ (백준 11689번) (0) | 2025.03.14 |