16948번: 데스 나이트
게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크
www.acmicpc.net
[ 백준 16948번 데스 나이트 소스 코드 ]
#include <cstdio>
#include <queue>
using namespace std;
int main()
{
bool check[210][210];
typedef pair<int,int> c;
queue<c> q;
queue<int> w;
int i,j,k,n,m,a,b,x,y,z;
scanf("%d",&k);
scanf("%d %d",&n,&m);
scanf("%d %d",&a,&b);
q.push(make_pair(n,m));
w.push(0);
check[n][m]=true;
while(!q.empty())
{
x=q.front().first;
y=q.front().second;
z=w.front();
if(x==a && y==b)
{
printf("%d",z);
return 0;
}
q.pop();
w.pop();
if(x-2>=0 && y-1>=0 && check[x-2][y-1]==false)
{
check[x-2][y-1]=true;
q.push(make_pair(x-2,y-1));
w.push(z+1);
}
if(x-2>=0 && y+1<k && check[x-2][y+1]==false)
{
check[x-2][y+1]=true;
q.push(make_pair(x-2,y+1));
w.push(z+1);
}
if(y-2>=0 && check[x][y-2]==false)
{
check[x][y-2]=true;
q.push(make_pair(x,y-2));
w.push(z+1);
}
if(y+2<k && check[x][y+2]==false)
{
check[x][y+2]=true;
q.push(make_pair(x,y+2));
w.push(z+1);
}
if(x+2<k && y-1>=0 && check[x+2][y-1]==false)
{
check[x+2][y-1]=true;
q.push(make_pair(x+2,y-1));
w.push(z+1);
}
if(x+2<k && y+1<k && check[x+2][y+1]==false)
{
check[x+2][y+1]=true;
q.push(make_pair(x+2,y+1));
w.push(z+1);
}
}
printf("-1");
}
'백준 문제풀이' 카테고리의 다른 글
백준 17386번 - 선분 교차1 소스 코드 (0) | 2021.03.20 |
---|---|
백준 3184번 - 양 소스 코드 (0) | 2021.03.08 |
백준 1260번 DFS와 BFS (0) | 2021.03.03 |
백준 1916번 - 최소비용 구하기 소스 코드 - 우선순위 큐 (0) | 2021.02.22 |
백준 2606 - 바이러스 소스 코드 (0) | 2021.02.21 |