알고리즘/BOJ
[c/c++] 백준/BOJ 7562번 문제 - 나이트의 이동
wonjun.Aden
2022. 3. 11. 17:01
https://www.acmicpc.net/problem/7562
7562번: 나이트의 이동
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수
www.acmicpc.net
문제

문제풀이
#include <bits/stdc++.h>
using namespace std;
int vis[303][303];
int dx[8]={1,2,2,1,-1,-2,-2,-1};
int dy[8]={2,1,-1,-2,-2,-1,1,2};
//나이트의 이동
//나이트는 몇 번 움직이면 이 칸으로 이동 가능할까
//나이트의 이동반경을 알고난 후 BFS 돌리고 이동하려는 칸의 횟수를 출력!
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
//테스트 케이스의 수
int n;
cin >> n;
while(n--){
//체스판 한변의 길이
int l;
cin >> l;
for(int i=0;i<l;i++) fill(vis[i],vis[i]+l,-1);
queue<pair<int,int>> Q;
int x,y,x1,y1;
cin >> x >> y;
vis[x][y]=0;
Q.push({x,y});
while(!Q.empty()){
auto cur = Q.front(); Q.pop();
for(int dir=0;dir<8;dir++){
int nx = cur.first + dx[dir];
int ny = cur.second + dy[dir];
if(nx < 0 || nx >= l || ny < 0 || ny >= l) continue;
if(vis[nx][ny] >=0) continue;
vis[nx][ny] = vis[cur.first][cur.second] +1;
Q.push({nx,ny});
}
}
cin >> x1 >> y1;
cout << vis[x1][y1] << '\n';
}
return 0;
}
문제의 포인트
- 나이트는 8방향으로 움직일 수 있음.
반응형