[LUOGU]P1443 马的遍历
题目描述
有一个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
基础的宽搜,最后注意输出-1的问题..
我的思路是把除了起始点的0都换成-1
不过memset -1也可以
//Writer:GhostCai && His Yellow Duck
#include<iostream>
#include<cstdio>
#include<queue>
#define MAXN 405
using namespace std;
struct point{
int x, y;
}node,r;
int a[MAXN][MAXN];
bool vis[MAXN][MAXN];
int m,n,sx,sy;
int mx[8]={1,2,2,1,-1,-2,-2,-1};
int my[8]={2,1,-1,-2,-2,-1,1,2};
void bfs(int x,int y){
node.x = x;
node.y = y;
queue<point> Q;
vis[x][y]=1;
a[x][y]=0;
Q.push(node);
while(!Q.empty() ){
r=Q.front();
Q.pop() ;
int nx,ny;
for(int i=0;i<=7;i++){
nx=r.x + mx[i];
ny=r.y + my[i];
if(nx<1||nx>m||ny<1||ny>n) continue;
if(vis[nx][ny]) continue;
node.x = nx;
node.y = ny;
Q.push(node);
a[nx][ny]=a[r.x][r.y ] +1;
vis[nx][ny]=1;
}
}
}
int main(){
cin>>m>>n>>sx>>sy;
bfs(sx,sy);
int i,j;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(a[i][j]==0&&(i!=sx||j!=sy)) a[i][j]=-1;
printf("%-5d",a[i][j]);
}
printf("\n");
}
}
[LUOGU]P1443 马的遍历的更多相关文章
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 最少步数&P1443 马的遍历
1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 q ...
- 洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...
- 【洛谷】P1443 马的遍历
题目:https://www.luogu.org/problemnew/show/P1443 简单的BFS模板题——因为我写出来了. 分析过程: n*m矩阵,用二维数组 数据不大,二维数组稳了 先把二 ...
- 洛谷 P1443 马的遍历
终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...
- 洛谷 P1443 马的遍历题解
题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...
- 洛谷——P1443 马的遍历
https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...
- 【洛谷P1443 马的遍历】
题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...
随机推荐
- web前端篇:JavaScript正则表达式
目录 JavaScript正则表达式 1.创建正则表达式 1.1方法1:直接量语法 1.2 方法2:创建RegExp对象的语法 1.3 区别: 1.4正则表达式使用 2.正则对象的属性 2.1.属性 ...
- 【bzoj3033】太鼓达人
3033: 太鼓达人 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 521 Solved: 399[Submit][Status][Discuss] ...
- Arch Linux 安装记(安装到移动硬盘)
一转眼传说中装起来难于上青天,用起来险如上刀梯(容易滚挂),绰号“洗发水”并被戏称为“邪教”的 Arch Linux 已经用了几个月.某些关于其安装难度和稳定性的传说实在太夸张了,反而觉得这才是适合懒 ...
- UG 常用设置
Q01:UG制图,添加基本视图之后的中心线怎么去掉? A01:“菜单-->文件-->首选项-->制图-->视图-->公共-->常规-->□带中心线创建”,取消 ...
- 利用HtmlParser解析网页内容
一,htmpparser介绍 htmlparser是一个功能比较强大的网页解析工具,主要用于 html 网页的转换(Transformation) 以及网页内容的抽取 (Extraction). 二, ...
- JavaScript Allongé 第一呷 :基础函数 (3) 未完
闭包与域是时候来看下一个带函数的函数是如何工作的: (function (x) { return function (y) { return x } })(1)(2) //=> 1 首先,我们使 ...
- codewars遇到的比较有意思的题目
题目要求是编写一个函数用来检测一个字符串,字符串是一系列单词组成,每个单词间用空格隔开,不用考虑空字符串的情况,返回长度最小的那个单词的长度. 博主刚入门PHP,技术还很菜,没有想出来,看了其他人的解 ...
- printf 遇到bash重定向
在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout); 方法一: 1 2 3 4 5 6 7 ...
- js获取元素的页面坐标
一.DOM中各种宽度.高度 二.DOM中的坐标系 JS获取div元素的宽度 offsetWidth=width+padding-left+padding-right+border-left+borde ...
- CSS-学习笔记五
1. 权重: 内联:A ID:B Class:C 标签:D 继承:0 2. 文字阴影text-shadow 3. 文字缩进text-index 4. 文本换行 5. 文本溢出 6. 圆角 ...