| //https://www.acmicpc.net/problem/7562 |
| #include <iostream> |
| #include <queue> |
| using namespace std; |
| int map[300][300]; |
| int sy,sx,dy,dx, I; |
|
|
| int diry[8]={2,2,1,1,-1,-1,-2,-2}; |
| int dirx[8]={-1,1,-2,2,-2,2,-1,1}; |
|
|
| void bfs(int starty, int startx) |
| { |
| queue<int> q; |
| q.push(starty*1000+startx); |
| map[starty][startx]=1; |
| bool chk=1; |
| while(chk && !q.empty()){ |
| int nowy=q.front()/1000; |
| int nowx=q.front()%1000; |
| q.pop(); |
|
|
|
|
| for(int i=0; i<8; i++) |
| { |
| int nexty=nowy+diry[i]; |
| int nextx=nowx+dirx[i]; |
|
|
| if(nexty >=0 && nexty <I && nextx>=0 && nextx<I && !map[nexty][nextx]) |
| { |
| q.push(nexty*1000+nextx); |
| map[nexty][nextx]=map[nowy][nowx]+1; |
| if(nexty==dy && nextx==dx) { chk=0; break;} |
| } |
| } |
|
|
| } |
|
|
| } |
|
|
|
|
| int main() |
| { |
| int t; |
| cin >> t; |
|
|
| for(int i=0; i<t; i++) |
| { |
| cin >> I; |
| for(int j=0; j<I; j++) |
| for(int k=0; k<I; k++) |
| map[j][k]=0; |
|
|
| cin >> sy >> sx >> dy >> dx; |
|
|
| bfs(sy,sx); |
| if(map[dy][dx]==0) cout << "0" <<endl; |
| else cout << map[dy][dx]-1 << endl; |
| } |
| } |