본문 바로가기

백준 문제 풀이

백준 7562 나이트의 이동(C++)

728x90
#include<iostream>
#include<queue>
#define MAX 301
using namespace std;

int dX[] = { 2,-2, 1,-1, 2 , -1 , -2 , 1};
int dY[] = { 1,-1,2,-2, -1 , 2 , 1 , -2};

int dis[MAX][MAX] = { 0 ,};
bool visited[MAX][MAX] = { false, };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int N;
	int Size;
	int nightX, nightY;
	int desX, desY;

	cin >> N;

	for (int i = 0; i < N; i++) {
		queue<pair<int, int>> Q;

		cin >> Size >> nightX >> nightY >> desX >> desY;

		for (int i = 0; i < Size; i++) {
			for (int j = 0; j < Size; j++) {
				dis[i][j] = 0;
				visited[i][j] = false;
			}
		}
		Q.push(make_pair(nightX, nightY));
		while (!Q.empty()) {
			int x = Q.front().first;
			int y = Q.front().second;

			Q.pop();

			if (x == desX && y == desY) {
				cout << dis[x][y] << '\n';
				break;
			}

			for (int i = 0; i < 8; i++) {
				int nnx = x + dX[i];
				int nny = y + dY[i];

				if (nnx > -1 && nnx < Size && nny > -1 && nny < Size && visited[nnx][nny] == false) {
					Q.push(make_pair(nnx, nny));
					dis[nnx][nny] = dis[x][y] + 1;
					visited[nnx][nny] = true;
				}
			}
		}
	}
}

 평범한 BFS문제이지만 4방향이 아닌 8방향으로 이동해야하고 한번출력이 아닌 여러번 출력이 가능해야한다. 그러므로 큐를 끝날때마다 비워주거나 지역변수로 다시 선언해야한다. 

 

그리고 가장 중요한 것 ...

 

줄바꿈을 안해줘서 4번이나 틀렸다 ㅂㄷㅂㄷ...

'백준 문제 풀이' 카테고리의 다른 글

백준 1475번 방 번호 (C++)  (0) 2022.11.25
백준 2805번 나무 자르기(C++)  (2) 2022.10.29
백준 1261번 알고스팟(C++)  (0) 2022.10.12
백준 13549 숨바꼭질3 (C++)  (0) 2022.10.10
백준 7576번 토마토(C++)  (1) 2022.10.05