[BaekJoon] 백준 7562번 나이트의 이동
문제: https://www.acmicpc.net/problem/7562
내코드
- 간단한 bfs문제
- queue를 초기화 시켜주는게 포인트 & 나이트의 이동방향을 dx, dy 로 선언해주기
- 아래는 아이패드에 정리한 내용
#include <iostream>
#include <string>
#include <queue>
#include <utility>
using namespace std;
const int MAX = 301;
int T = 0;
int dx[] = { 1,2,2,1,-1,-2,-2,-1 };
int dy[] = { 2,1,-1,-2,-2,-1,1,2 };
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> T;
while (T--) {
int l = 0, curx, cury;
queue<pair<pair<int, int>, int>> qu;
pair<int, int> goal;
bool visited[MAX][MAX] = { false, };
cin >> l;
cin >> curx >> cury >> goal.first >> goal.second;
if (curx == goal.first && cury == goal.second) {
cout << 0 << "\n";
continue;
}
qu.push(make_pair(make_pair(curx, cury), 0));
visited[curx][cury] = true;
while (!qu.empty()) {
int a = qu.front().first.first;
int b = qu.front().first.second;
int c = qu.front().second;
qu.pop();
if (a == goal.first && b == goal.second) {
cout << c;
if (T != 0) cout << "\n";
break;
}
for (int i = 0; i < 8; i++) {
int x = a + dx[i];
int y = b + dy[i];
if (x < 0 || y < 0 || x >= l || y >= l) continue;
if (!visited[x][y]) {
qu.push(make_pair(make_pair(x, y), c + 1));
visited[x][y] = true;
}
}
}
}
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 2468번 안전영역 (0) | 2020.03.19 |
---|---|
[BaekJoon] 백준 2206번 벽 부수고 이동하기 (0) | 2020.03.19 |
[BaekJoon] 백준 10026번 적록색약 - C++, Python (0) | 2020.03.17 |
[BaekJoon] 백준 2583번 영역 구하기 (0) | 2020.03.15 |
[BaekJoon] 백준 1012번 유기농 배추(C++, Python) (0) | 2020.03.15 |