#include <bits/stdc++.h>
using namespace std;
struct dist
{
int x,y,d;
};
bool issafe(int x,int y,int n,int m)
{
if(x>0 && x<=n && y>0 && y<=m)
return true;
return false;
}
void find(int s1,int s2,int d1,int d2,int n,int m)
{
int visited[30][30];
memset(visited,0,sizeof(visited));
int i,j,x,y;
struct dist p,z;
p.x = s1;
p.y = s2;
p.d = 0;
queue<struct dist>q;
q.push(p);
while(q.empty()==false)
{
p = q.front();
//cout<<p.x<<" "<<p.y<<" ";
q.pop();
if(p.x==d1 && p.y==d2)
{
cout<<p.d<<endl;
return;
}
int xMove[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int yMove[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
for(i=0;i<8;i++)
{
x = p.x + xMove[i];
y = p.y + yMove[i];
if(issafe(x,y,n,m)==true && visited[x][y]==0)
{
z.x = x;
z.y = y;
z.d = p.d + 1;
q.push(z);
visited[x][y] = 1;
}
}
}
cout<<-1<<endl;
}
int main() {
int t,i,j,n,m,s1,s2,d1,d2;
cin>>t;
while(t--)
{
cin>>n>>m;
cin>>s1>>s2>>d1>>d2;
find(s1,s2,d1,d2,n,m);
}
return 0;
}
using namespace std;
struct dist
{
int x,y,d;
};
bool issafe(int x,int y,int n,int m)
{
if(x>0 && x<=n && y>0 && y<=m)
return true;
return false;
}
void find(int s1,int s2,int d1,int d2,int n,int m)
{
int visited[30][30];
memset(visited,0,sizeof(visited));
int i,j,x,y;
struct dist p,z;
p.x = s1;
p.y = s2;
p.d = 0;
queue<struct dist>q;
q.push(p);
while(q.empty()==false)
{
p = q.front();
//cout<<p.x<<" "<<p.y<<" ";
q.pop();
if(p.x==d1 && p.y==d2)
{
cout<<p.d<<endl;
return;
}
int xMove[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int yMove[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
for(i=0;i<8;i++)
{
x = p.x + xMove[i];
y = p.y + yMove[i];
if(issafe(x,y,n,m)==true && visited[x][y]==0)
{
z.x = x;
z.y = y;
z.d = p.d + 1;
q.push(z);
visited[x][y] = 1;
}
}
}
cout<<-1<<endl;
}
int main() {
int t,i,j,n,m,s1,s2,d1,d2;
cin>>t;
while(t--)
{
cin>>n>>m;
cin>>s1>>s2>>d1>>d2;
find(s1,s2,d1,d2,n,m);
}
return 0;
}
No comments:
Post a Comment