반응형

www.acmicpc.net/problem/16948

 

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");
}
반응형
Posted by 명문코딩컴퓨터
,