하다보니

7562번-나이트의 이동 본문

알고리즘 풀이/백준

7562번-나이트의 이동

claire 2022. 2. 5. 01:38
#include<bits/stdc++.h>
#define X first
#define Y second
using namespace std;

int dx[8] = { 2,-2,1,-1,2,-2,1,-1 };
int dy[8] = { 1,1,2,2,-1,-1,-2,-2 };
int board[302][302];
int vis[302][302];

int main() {
	int n;	//테스트 케이스
	cin >> n;
	while (n--) {
		queue<pair<int, int>> Q;
		int l;	//체스판의 한 변의 길이
		cin >> l;
		for (int i = 0; i < l; i++) fill(vis[i], vis[i] + l, -1);

		int a, b,c,d;
		cin >> a >> b;	//출발지
		cin >> c >> d;	//도착지
		Q.push({ a,b });
		vis[a][b] = 0;
		while (!Q.empty()) {
			auto cur = Q.front(); Q.pop();
			if (cur.X == c && cur.Y == d) {
				cout << vis[cur.X][cur.Y]<<"\n";
				break;
			}
			for (int i = 0; i < 8; i++) {
				int nx = cur.X + dx[i];
				int ny = cur.Y + dy[i];
				if (nx < 0 || nx >= l || ny < 0 || ny >= l)continue;
				if (vis[nx][ny] != -1)continue;
				Q.push({ nx,ny });
				vis[nx][ny] = vis[cur.X][cur.Y] + 1;
			}
		}
	}
}

'알고리즘 풀이 > 백준' 카테고리의 다른 글

1629-곱셈  (0) 2022.02.07
2583번-영역 구하기  (0) 2022.02.07
7569번-토마토  (0) 2022.02.05
10026번-적록색약  (0) 2022.02.04
1012번-유기농 배추  (0) 2022.02.03