[백준/BOJ] 백준 12761번 : 돌다리
2020. 8. 18. 08:40ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/12761
이동할 수 있는 8가지 방법을 고려하여 목적지까지 이동 횟수의 최솟값을 구한다
코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int a, b, n, m;
int discovered[100001];
int depth[100001];
int d[8] = { -1,1,0,0,0,0,0,0 };
int Solve(int start, int dest)
{
discovered[start] = 1;
depth[start] = 0;
queue<int>q;
q.push(start);
while (!q.empty())
{
int here = q.front();
q.pop();
//목적지에 도착 했을때
if (here == dest)
return depth[here];
for (int i = 0; i < 8; i++)
{
int there;
if (i == 6 || i == 7)
there = here * d[i];
else
there = here + d[i];
if (there >= 0 && there <= 100000 && discovered[there] == 0)
{
discovered[there] = 1;
depth[there] = depth[here] + 1;
q.push(there);
}
}
}
return -1;
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
memset(discovered, 0, sizeof(discovered));
memset(depth, 0, sizeof(depth));
cin >> a >> b >> n >> m;
d[2] = -a;
d[3] = a;
d[4] = -b;
d[5] = b;
d[6] = a;
d[7] = b;
cout << Solve(n, m);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 11727번 : 2×n 타일링 2 (0) | 2020.08.18 |
---|---|
[백준/BOJ] 백준 1039번 : 교환 (0) | 2020.08.18 |
[백준/BOJ] 백준 2234번 : 성곽 (0) | 2020.08.18 |
[백준/BOJ] 백준 1967번 : 트리의 지름 (0) | 2020.08.18 |
[백준/BOJ] 백준 11559번 : Puyo Puyo (0) | 2020.08.18 |