1 条题解
-
0
思路
八向马步建立单位权图,区别棋盘距离与四向移动。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){int t;cin>>t;int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1};while(t--){int n,a,b,c,d;cin>>n>>a>>b>>c>>d;vector<vector<int>>dist(n,vector<int>(n,-1));queue<pair<int,int>>q;q.push({a,b});dist[a][b]=0;while(!q.empty()){auto p=q.front();q.pop();if(p.first==c&&p.second==d)break;for(int k=0;k<8;k++){int x=p.first+dx[k],y=p.second+dy[k];if(x>=0&&x<n&&y>=0&&y<n&&dist[x][y]<0){dist[x][y]=dist[p.first][p.second]+1;q.push({x,y});}}}cout<<dist[c][d]<<'\n';}}
- 1