zoukankan      html  css  js  c++  java
  • 洛谷P1443马的遍历

    传送

    这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢?

    因为输出格式

    题目要求左对齐,宽度为5输出,在此说一下如何控制宽度。

    下面的m都为要求的宽度

    int 类型:

    printf: %md(现在是右对齐)

                左对齐:%-md

    cout:cout<<left<<setw(m)<<"你要输出的东西balabala"<<endl;(左对齐)

              cout<<right<<setw(m)<<"你要输出的东西balabala"<<endl;(右对齐)

    显然这里我们要写printf("%-5d",a[i][j]);

    解决输出,剩下就是广搜模板的问题了。

    首先先让马的起点坐标入队,然后在8个方向上扩展。

    那到达每个点需要的步数就是到达这个点之前一个点的步数+1(类似递推吧),用a[i][j]记录到达点(i,j)的步数。

    广搜到最后,如果有a[i][j]为0且(i,j)不是起点,就把它变为-1,然后输出。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<iomanip>
    using namespace std;
    int n,m,sx,sy,a[401][401],dx[8]={2,2,1,1,-1,-1,-2,-2},dy[8]={1,-1,2,-2,2,-2,1,-1};
    bool vis[401][401];
    struct dl{
        int x,y;
        dl(int xx,int yy):x(xx),y(yy){}//构造函数,入队用的
        //意思就是把x赋值为xx,把y赋值为yy
    };
    queue<dl>q;
    bool hf(int xx,int yy)
    {if(vis[xx][yy])return 0;
      if(xx<1||yy<1||xx>n||yy>m)return 0;
      return 1;
    }
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&sx,&sy);
        a[sx][sy]=0;
        vis[sx][sy]=1;
        q.push(dl(sx,sy));
        while(!q.empty())
        {dl ex=q.front();
          q.pop();
          for(int i=0;i<=7;i++)
          {int xx=ex.x,yy=ex.y;
            xx+=dx[i];yy+=dy[i];
            if(hf(xx,yy))
            {//printf("xx=%d,yy=%d
    ",xx,yy);
            //getchar();  分享一下个人广搜的测试方法qwq
             a[xx][yy]=a[ex.x][ex.y]+1;
              vis[xx][yy]=1;
              q.push(dl(xx,yy));
            }
          }
        }
        for(int i=1;i<=n;i++)
        {for(int j=1;j<=m;j++)
           {if(a[i][j]==0&&(i!=sx||j!=sy))
              a[i][j]=-1;
           printf("%-5d",a[i][j]);
           }
           printf("
    ");
        }
    }
  • 相关阅读:
    386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列
    287. Find the Duplicate Number 找出数组中的重复数字
    165. Compare Version Numbers比较版本号的大小
    java之spring mvc之文件上传
    java之spring mvc之Restful风格开发及相关的配置
    java之spring mvc之页面跳转
    java之spring mvc之数据处理
    java之spring mvc之Controller配置的几种方式
    java之spring mvc之helloworld
    java之spring mvc之初始spring mvc
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/10720177.html
Copyright © 2011-2022 走看看