#include <stdio.h>
#include <memory.h>
#include <iostream>
#include <queue>
using namespace std;
#define N 101
struct node
{
int x;
int y;
int step;
};
bool isVisited[N][N];
int n;
int main()
{
int i,j,startX,startY,endX,endY,flag;;
struct node temp,p;
int move[8][2]={{1,2},{2,1},{1,-2},{2,-1},{-1,2},{-2,1},{-2,-1},{-1,-2}};
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
isVisited[i][j]=false;
}
}
scanf("%d%d%d%d",&startX, &startY, &endX, &endY);
if(n<=0||n>100)
{
printf("-1\n");
continue;
}
if(startX==endX&&startY==endY)
{
printf("0\n");
continue;
}
queue<struct node> queueNodes;
flag=0;
p.x=startX;
p.y=startY;
p.step=0;
isVisited[p.x][p.y]=true;
queueNodes.push(p);
while(!queueNodes.empty())
{
p=queueNodes.front();
queueNodes.pop();
for(i=0;i<8;i++)
{
temp.x=p.x+move[i][0];
temp.y=p.y+move[i][1];
temp.step=p.step+1;
if(temp.x==endX&&temp.y==endY)
{
flag=1;
printf("%d\n",temp.step);
break;
}
if(temp.x>=1&&temp.y>=1&&temp.x<=n&temp.y<=n&&!isVisited[temp.x][temp.y])
{
queueNodes.push(temp);
isVisited[temp.x][temp.y]=true;
}
}
if(flag)
{
break;
}
}
if(!flag)
{
printf("-1\n");
}
}
return 0;
}
/**************************************************************
Problem: 1365
User: cust123
Language: C++
Result: Accepted
Time:460 ms
Memory:1532 kb
****************************************************************/
题目1365:贝多芬第九交响曲
最新推荐文章于 2019-08-01 18:57:15 发布