1 条题解

  • 0
    @ 2026-10-25 18:02:03

    思路

    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

    信息

    ID
    1336
    时间
    1000ms
    内存
    64MiB
    难度
    普及−
    标签
    递交数
    1
    已通过
    1
    上传者