zoukankan      html  css  js  c++  java
  • 洛谷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;
    }
    

      

  • 相关阅读:
    令我印象最深刻的三个老师
    硬盘大于2T安装CentOS7.X时要注意分区
    Linux网卡配置
    Python13:文件操作
    Python12:集合
    Python11:字典
    Python10:String字符串
    Python09:元组
    Python08:列表
    Python07:模块初识
  • 原文地址:https://www.cnblogs.com/lujin49/p/13447619.html
Copyright © 2011-2022 走看看