添加链接描述
注意初始化
#include<bits/stdc++.h>
using namespace std;
const int N=300+9,M=N*N+9;
int mp[N][N];
int n,m,k,a,b,c,d;
int ans1,ans2;
int vis[N][N];
struct node {
int x,y,step;
};
int dx[]={-1,-2,-2,-1,1,2,2,1};
int dy[]={-2,-1,1,2,2,1,-1,-2};
int bfs1(){
queue<node>q;
while(q.size())q.pop();
q.push({a,b,0});
vis[a][b]=1;
if(a==c&&b==d)return 0;
while(q.size()){
auto p=q.front();
q.pop();
for(int i=0;i<8;i++){
int nx=dx[i]+p.x,ny=dy[i]+p.y;
if(nx<1||nx>n||ny<1||ny>m)continue;
if(vis[nx][ny])continue;
if(mp[nx][ny]==-1)continue;
vis[nx][ny]=1;
if(nx==c&&ny==d){
return p.step+1;
}
q.push({nx,ny,p.step+1});
}
}
return -1;
}
int nox[]={0,-1,-1,0,0,1,1,0};
int noy[]={-1,0,0,1,1,0,0,-1};
int bfs2(){
queue<node>q;
while(q.size())q.pop();
q.push({a,b,0});
vis[a][b]=1;
if(a==c&&b==d)return 0;
while(q.size()){
auto p=q.front();
q.pop();
for(int i=0;i<8;i++){
int nx=dx[i]+p.x,ny=dy[i]+p.y;
int nnx=p.x+nox[i],nny=p.y+noy[i];
if(nx<1||nx>n||ny<1||ny>m)continue;
if(mp[nx][ny]==-1)continue;
if(mp[nnx][nny]==-1)continue;
if(vis[nx][ny])continue;
vis[nx][ny]=1;
if(nx==c&&ny==d){
return p.step+1;
}
q.push({nx,ny,p.step+1});
}
}
return -1;
}
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--){
memset(vis,0,sizeof vis);
ans1=ans2=0;
cin>>n>>m>>k>>a>>b>>c>>d;
memset(mp,0,sizeof mp);//!!
while(k--){
int x,y;
cin>>x>>y;
mp[x][y]=-1;
}
// cout<<"---"<<endl;
cout<<bfs1()<<" ";
memset(vis,0,sizeof vis);
cout<< bfs2()<<"\n";
}
return 0;
}