洛谷P1443 马的遍历【BFS】
题目描述
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
输入输出格式
输入格式:
一行四个数据,棋盘的大小和马的坐标
输出格式:
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
输入输出样例
输入样例#1: 复制
3 3 1 1
输出样例#1: 复制
0 3 2
3 -1 1
2 1 4
思路:这种题的话用宽搜和广搜都可以,我的思路是每次读取它周围的(能到达的八个方向),在边界内并且未到达过的点入队列,入队的继续读取,不过步数要加一。
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=405;
int d[2][8]={{1,1,2,2,-1,-1,-2,-2},{2,-2,1,-1,2,-2,1,-1}};
int n,m,x,y;
int m1[405][405],mark[405][405];
struct node
{
    int a,b;
};
void bfs(int t)
{
    node f;
    queue <node> q;
    f.a=x,f.b=y;
    q.push(f);
    while(!q.empty())
    {
        node front =q.front();
        q.pop();
        for(int i=0;i<8;++i)
        {
            int dx=front.a+d[0][i];
            int dy=front.b+d[1][i];
            if(dx>0 && dx<=n && dy>0 && dy <=m && !mark[dx][dy])
            {
                mark[dx][dy]=1;
                m1[dx][dy]=m1[front.a][front.b]+1;
                node n1;
                n1.a=dx,n1.b=dy;
                q.push(n1);
            }
        }
    }
}
int main()
{
    scanf("%d%d%d%d",&n,&m,&x,&y);
    memset(m1,-1,sizeof(m1));
    m1[x][y]=0;
    bfs(1);
    m1[x][y]=0;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
            printf("%-5d",m1[i][j]);
        printf("\n");
    }
    //printf("%d\n",m1[1][1]);
    return 0;
}
洛谷P1443 马的遍历【BFS】的更多相关文章
- 洛谷 - P1443 - 马的遍历 - bfs
		略有收获的bfs,使用了try_enqueue函数使得加入队列非常方便.性能理论上是一样的因为是inline? 还有就是左对齐是使用%-4d,相对于右对齐的%4d,还有右对齐前导零的%04d,自己试一 ... 
- 【bfs】洛谷 P1443 马的遍历
		题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ... 
- 洛谷 P1443 马的遍历
		P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ... 
- 洛谷P1443 马的遍历(bfs,注意输出格式)
		题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ... 
- 洛谷P1443 马的遍历
		https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ... 
- 洛谷 P1443 马的遍历
		终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ... 
- 洛谷 P1443 马的遍历题解
		题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ... 
- 【洛谷P1443 马的遍历】
		题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ... 
- 洛谷——P1443 马的遍历
		https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ... 
随机推荐
- 你不知道的JavaScript--Item33 跨域总结与解决的方法
			一.神马是跨域(Cross Domain) 说白点就是post.get的url不是你当前的站点,域名不同.比如在*aaa.com/a.html*里面,表单的提交action是bbb.com/b.htm ... 
- selenium获取弹窗提示
			1.点击保存给的提示是几秒钟,遮罩显示 2. 其他弹窗处理方法 http://blog.csdn.net/Real_Tino/article/details/59068827 
- everything的使用
			https://www.voidtools.com/support/everything/searching/ 打开多个everything进程 https://www.voidtools.com/s ... 
- 第13课 SmartGit程序操作介绍
			http://www.syntevo.com/ 
- sublime 的快捷键大全
			Sublime Text 3 快捷键精华版 Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W ... 
- 微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码
			以tshop为例 直接上代码: 企业 cc_wx_sys表为自建,存储系统消息的配置的 字段: id type key status <?php /** * tpshop * ========= ... 
- Hadoop一主一从部署(2)
			Hadoop部署一主一从(2) 1.关闭防火墙和Linux守护进程 执行命令: iptables -F setenforce 0 2.对Hadoop集群进行初始化,在namenode(主机)上执行命令 ... 
- Visual Studio q启动卡顿
			在开发人员CMD下面执行 Devenv.exe /ResetSettings ,然后顺利打开 总发现vs2015经常把cpu给占满了,导致电脑卡的不要不要的.这是CodeLens引起的,因为装了VAs ... 
- BZOJ 4562 搜索...
			思路: 统计入度&出度 每搜到一个点 in[v[i]]--,f[v[i]]+=f[t]; if(!in[v[i]])if(out[v[i]])q.push(v[i]);else ans+=f[ ... 
- 仿QQ空间长图效果简易版--母亲节感恩
			手机网站 母亲节最火的两件事 1.NBA 杜兰特在获MVP催泪致辞献给母亲:她才是真的MVP. 2.QQ空间长图 ------------------------------------------- ... 
