传送

这是个广搜,思路和普通的迷宫题差不多,但我卡了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[][],dx[]={,,,,-,-,-,-},dy[]={,-,,-,,-,,-};
bool vis[][];
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 ;
if(xx<||yy<||xx>n||yy>m)return ;
return ;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&sx,&sy);
a[sx][sy]=;
vis[sx][sy]=;
q.push(dl(sx,sy));
while(!q.empty())
{dl ex=q.front();
q.pop();
for(int i=;i<=;i++)
{int xx=ex.x,yy=ex.y;
xx+=dx[i];yy+=dy[i];
if(hf(xx,yy))
{//printf("xx=%d,yy=%d\n",xx,yy);
//getchar(); 分享一下个人广搜的测试方法qwq
a[xx][yy]=a[ex.x][ex.y]+;
vis[xx][yy]=;
q.push(dl(xx,yy));
}
}
}
for(int i=;i<=n;i++)
{for(int j=;j<=m;j++)
{if(a[i][j]==&&(i!=sx||j!=sy))
a[i][j]=-;
printf("%-5d",a[i][j]);
}
printf("\n");
}
}

洛谷P1443马的遍历的更多相关文章

  1. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  2. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...

  3. 洛谷P1443 马的遍历

    https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...

  4. 洛谷 P1443 马的遍历

    终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...

  5. 洛谷 P1443 马的遍历题解

    题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...

  6. 【洛谷P1443 马的遍历】

    题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...

  7. 洛谷P1443 马的遍历(bfs,注意输出格式)

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  8. 洛谷P1443 马的遍历【BFS】

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  9. 洛谷——P1443 马的遍历

    https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...

随机推荐

  1. Oracle DB 使用RMAN恢复目录

    • 对恢复目录和RMAN 资料档案库控制文件的使用进行比较• 创建和配置恢复目录• 在恢复目录中注册数据库• 同步恢复目录• 使用RMAN 存储脚本• 备份恢复目录• 创建虚拟专用目录 RMAN 资料 ...

  2. multipath配置详细参考

    1.配置文件结构及位置multipath配置文件/etc/multipath.conf由节(section),子节(sub-section),属性(atribute)和属性值(value)等组成,其结 ...

  3. Java入门自学笔记

    一.变量 变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个的不同的名字. 标识符的构造规则:只能有字母.数字和下划线组成,数字不能在首位,java的关键字(保留字)不可以用做 ...

  4. Edge 浏览器 调用

    ShellExecute(0, 'open', PChar('Microsoft-Edge:' + Edit1.Text), nil, nil, SW_SHOW);

  5. Jsの练习-将 数组中值为0 的去掉,不为0的存入一个新的数组

    要求:将 数组中值为0 的去掉,不为0的存入一个新的数组 代码如下: <!DOCTYPE html> <html lang="en"> <head&g ...

  6. ubuntu svn服务本地搭建使用

    安装 sudo apt-get install subversion 创建一个仓库 svnadmin create mysvn 编辑配置文件  /home/exayong/mysvn就是上面创建的目录 ...

  7. Java语法基础学习DayThirteen(枚举类和注解)

    一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...

  8. JAVA学习笔记系列1-Java版本介绍

    JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用(桌面应用).因为一般都是Windows系统,因此Java的这个发展并不好. JavaEE(Java Ent ...

  9. jdbc “贾琏欲执事”

    “贾琏欲执事” 1.加载驱动2.获取连接3.SQL语句4.执行SQL5.释放资源 示例: public void test_insert() { String driver="oracle. ...

  10. Django App(五) load static files

    经过前面4篇的努力,已经基本完成了,polls站点的功能,但是所有界面都没有涉及样式,和JavaScript的导入.到目前为止了解到的Django是通过解析Url来完成对客户端的响应的,那么组成站点所 ...