最少步数

科技资讯 投稿 6200 0 评论

最少步数

输入

共两行。

  • 第二行为:B点的坐标x1,y1,两个数之间用空格隔开。

输出

    第一行:A点到(1,1)的最少步数

样例输入

12 16
18 10

样例输出

8
9

我无须多言,各位大佬自能看懂本蒟蒻的代码qwq



解法1:

#include<bits/stdc++.h>
using namespace std;
int di[13]={0,-2,-2,-1,-1,1,1,2,2,-2,-2,2,2},  //一共12个方向 
    dj[13]={0,1,-1,2,-2,2,-2,1,-1,2,-2,2,-2};
int c[105][105];   
bool f[105][105];              //标记是否走过 
int bfs(int x, int y
{
    queue<int>qx, qy;
    qx.push(x,qy.push(y;
    memset(c,0,sizeof(c;  
    memset(f,0,sizeof(f;    //清零?为什么 
    f[x][y]=1,c[x][y]=0;      //标记该点走过,第一个点为0步 
    if(x==1&&y==1 return 0;
    while(!qx.empty(
    {
        for(int i=1;i<=12;i++ 
        {
            int a=qx.front(+di[i], b=qy.front(+dj[i];  
            if(a>=1&&b>=1&&a<=100&&b<=100&&f[a][b]==0  //未越界,未走过 
            {
                if(a==1&&b==1 return c[qx.front(][qy.front(]+1;  //如果到了终点 
                qx.push(a,qy.push(b; //如果没有到终点,就开始搜索,入队列 
                f[a][b]=1;  //标记走过了 
                c[a][b]=c[qx.front(][qy.front(]+1;  //步数加1 
            }
        }
        qx.pop(,qy.pop(;
    }
}
int main(
{
    int n1, n2, m1, m2;
    cin>>n1>>m1>>n2>>m2;
    cout<<bfs(n1, m1<<endl;
    cout<<bfs(n2, m2;
}

解法2:

#include<bits/stdc++.h>
using namespace std;
bool f[105][105];
int c[105][105];
int dx[13]={0,-2,-2,2,2,-2,-2,-1,1,2,2,-1,1},
    dy[13]={0,2,-2,-2,2,1,-1,2,2,1,-1,-2,-2};
int bfs(int h,int l
{
    queue<int> qx,qy;
    memset(c,0,sizeof(c;
    memset(f,0,sizeof(f;
    c[h][l]=0;f[h][l]=1;
    qx.push(h;qy.push(l;
    while(qx.empty(!=1
    {
        for(int i=1;i<=12;i++
        {
            int sx=qx.front(+dx[i],sy=qy.front(+dy[i];
            if(sx<=100&&sx>=1&&sy<=100&&sy>=1&&f[sx][sy]==0
            {
                c[sx][sy]=c[qx.front(][qy.front(]+1;
                qx.push(sx;qy.push(sy;
                f[sx][sy]=1;
            }
            if(qx.back(==1&&qy.back(==1{return c[1][1];}
        }
        qx.pop(;qy.pop(;
    }
} 
int main(
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    cout<<bfs(a,b<<endl<<bfs(c,d;
}

编程笔记 » 最少步数

赞同 (29) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽