[BOJ S2][C++] λ°±μ€ 7562λ²: λμ΄νΈμ μ΄λ
https://www.acmicpc.net/problem/7562
7562λ²: λμ΄νΈμ μ΄λ
체μ€ν μμ ν λμ΄νΈκ° λμ¬μ Έ μλ€. λμ΄νΈκ° ν λ²μ μ΄λν μ μλ μΉΈμ μλ κ·Έλ¦Όμ λμμλ€. λμ΄νΈκ° μ΄λνλ €κ³ νλ μΉΈμ΄ μ£Όμ΄μ§λ€. λμ΄νΈλ λͺ λ² μμ§μ΄λ©΄ μ΄ μΉΈμΌλ‘ μ΄λν μ
www.acmicpc.net
λ¬Έμ
체μ€ν μμ ν λμ΄νΈκ° λμ¬μ Έ μλ€. λμ΄νΈκ° ν λ²μ μ΄λν μ μλ μΉΈμ μλ κ·Έλ¦Όμ λμμλ€. λμ΄νΈκ° μ΄λνλ €κ³ νλ μΉΈμ΄ μ£Όμ΄μ§λ€. λμ΄νΈλ λͺ λ² μμ§μ΄λ©΄ μ΄ μΉΈμΌλ‘ μ΄λν μ μμκΉ?

μ λ ₯
μ λ ₯μ 첫째 μ€μλ ν μ€νΈ μΌμ΄μ€μ κ°μκ° μ£Όμ΄μ§λ€.
κ° ν μ€νΈ μΌμ΄μ€λ μΈ μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. 첫째 μ€μλ 체μ€νμ ν λ³μ κΈΈμ΄ l(4 ≤ l ≤ 300)μ΄ μ£Όμ΄μ§λ€. 체μ€νμ ν¬κΈ°λ l × lμ΄λ€. 체μ€νμ κ° μΉΈμ λ μμ μ {0, ..., l-1} × {0, ..., l-1}λ‘ λνλΌ μ μλ€. λμ§Έ μ€κ³Ό μ μ§Έ μ€μλ λμ΄νΈκ° νμ¬ μλ μΉΈ, λμ΄νΈκ° μ΄λνλ €κ³ νλ μΉΈμ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λ§λ€ λμ΄νΈκ° μ΅μ λͺ λ²λ§μ μ΄λν μ μλμ§ μΆλ ₯νλ€.
νμ΄
BFS μ΄μ©ν΄μ κ°λ¨νκ² νμ΄ κ°λ₯νλ€.
λ¨ λμ΄νΈμ μ΄λλ°©ν₯μ λ§κ² dx dy λ°°μ΄λ€μ μ€μ ν΄μ£Όκ³
μ΄μ°¨μ λ°°μ΄μ κ±°λ¦¬λ§ λ΄μλ μΆ©λΆνλ€.
μ½κ°μ λ³νμ΄ κ°ν΄μ§ BFS λ¬Έμ
// Authored by : seondal
// νμ΄ : https://whkakrkr.tistory.com/
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
using namespace std;
int dis[302][302];
int dx[8] = {-2, -1, 1, 2, -2, -1, 1, 2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--){
queue<pair<int, int>> q;
int n, a, b;
cin >> n; // μΉΈ μ€μ
// μ΄κΈ°ν
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
dis[i][j] = -1;
}
}
cin >> a >> b; // μΆλ°μ§ μ€μ
dis[a][b] = 0;
q.push({a,b});
cin >> a >> b; // λμ°©μ§ μ€μ
while(!q.empty()){
pair<int, int> current = q.front();
q.pop();
for(int dir=0; dir<8; dir++){
int x = current.first + dx[dir];
int y = current.second + dy[dir];
if(x<0 || x>=n || y<0 || y>=n) continue;
if(dis[x][y] >= 0) continue;
dis[x][y] = dis[current.first][current.second] + 1;
q.push({x,y});
}
}
cout << dis[a][b] << "\n";
}
return 0;
}
/*
*/