思路:BFS。裸的BFS。。。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 15;
struct Node
{
int x,y,steps;
}NOW,NEXT;
int MAP[9][9]={
1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,1,0,1,
1,0,0,1,1,0,0,0,1,
1,0,1,0,1,1,0,1,1,
1,0,0,0,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,0,0,0,1,
1,1,1,1,1,1,1,1,1};
int sx,sy,ex,ey;
int dir[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};
bool vis[15][15];
int bfs()
{
memset(vis,0,sizeof(vis));
NOW.x = sx; NOW.y = sy; NOW.steps = 0; vis[sx][sy] = true;
queue<Node> q;
q.push(NOW);
while(!q.empty())
{
NOW = q.front();
if(NOW.x == ex && NOW.y == ey) return NOW.steps;
q.pop();
for(int i = 0; i < 4; i++)
{
int X = NOW.x + dir[i][0], Y = NOW.y + dir[i][1];
if(X >= 0 && Y >= 0 && X < 9 && Y < 9 && vis[X][Y] == false && MAP[X][Y] == 0)
{
vis[X][Y] = true;
NEXT.x = X; NEXT.y = Y; NEXT.steps = NOW.steps + 1;
q.push(NEXT);
}
}
}
return 0;
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>sx>>sy>>ex>>ey;
cout<<bfs()<<endl;
}
return 0;
}