• 洛谷P1443马的遍历-题解


    原题:

    思路:

     

    广搜。

    但队列除了记忆坐标,还要记忆步数。

    在将一个点入队的时候,这个点的步数为这个点的父亲节点的步数+1,顺便把答案设了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int sx,sy;
    int a[405][405];
    int book[405][405];
    int nxt[8][2]={{-2,1},{-2,-1},{-1,2},{-1,-2},{2,1},{2,-1},{1,2},{1,-2}};
    queue<int> qx;
    queue<int> qy;
    queue<int> qs;
    void BFS()
    {
        while(!qx.empty()&&!qy.empty())
        {
            for(int i=0;i<8;i++)
            {
                int tx=qx.front()+nxt[i][0];
                int ty=qy.front()+nxt[i][1];
                int ts=qs.front()+1;
                if(tx<=0||tx>n||ty<=0||ty>m)
                    continue;
                if(book[tx][ty]==1)
                    continue;
                a[tx][ty]=ts;
                book[tx][ty]=1;
                qx.push(tx);
                qy.push(ty);
                qs.push(ts);
            }
            qx.pop();
            qy.pop();
            qs.pop();
        }
    }
    int main()
    {
        scanf("%d %d %d %d",&n,&m,&sx,&sy);
        qx.push(sx);
        qy.push(sy);
        qs.push(0);
        book[sx][sy]=1;
        BFS();
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                if(book[i][j])
                    printf("%-5d",a[i][j]);
                else
                    printf("%-5d",-1);
            printf("
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    fastjson 使用方法
    算法
    SHA算法
    MD5算法
    kindle推送服务
    DLL劫持
    Hook编程
    Hook技术
    权限验证
    虚拟机
  • 原文地址:https://www.cnblogs.com/lujin49/p/13447619.html
Copyright © 2020-2023  润新知