1 条题解
-
0
思路
100乘100棋盘,8种马步与4种田字步;两个位置分别求到1,1的最少步数。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int solve(int x,int y){int d[101][101];memset(d,-1,sizeof d);queue<pair<int,int>>q;q.push({x,y});d[x][y]=0;int dx[]={1,1,-1,-1,2,2,-2,-2,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1,2,-2,2,-2};while(!q.empty()){auto p=q.front();q.pop();if(p.first==1&&p.second==1)return d[1][1];for(int i=0;i<12;i++){int a=p.first+dx[i],b=p.second+dy[i];if(a>=1&&a<=100&&b>=1&&b<=100&&d[a][b]<0){d[a][b]=d[p.first][p.second]+1;q.push({a,b});}}}return -1;}int main(){for(int i=0;i<2;i++){int x,y;cin>>x>>y;cout<<solve(x,y)<<'\n';}}
- 1