洛谷P1443 马的遍历【BFS】
2024-08-30 15:40:37
题目描述
有一个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;
}
最新文章
- 数据库 基础篇3(mysql语法)
- [Lintcode two-sum]两数之和(python,双指针)
- Hibernate的常用关键类以及接口介绍
- [USACO10MAR]伟大的奶牛聚集
- ecmascript 的一些发展新动向
- 基于JQUERY写的 LISTBOX 选择器
- 02-UIKit控件、MVC
- 基于visual Studio2013解决面试题之0402合并升序链表并去重
- 用scikit-learn学习LDA主题模型
- 从CentOS安装完成到生成词云python学习日记
- 迁移学习︱艺术风格转化:Artistic style-transfer+ubuntu14.0+caffe(only CPU)
- C++对C语言register的增强
- iTOP-4418开发板所用核心板研发7寸/10.1寸安卓触控一体机
- 理解Session缓存
- MySQL存储过程 事务transaction
- Android 全局搜索条写成自定义控件-曹永思
- Visual Studio 2013 发布正式版及使用感受
- 【BZOJ-1913】signaling信号覆盖 极角排序 + 组合
- [javascript] Promise简单学习使用
- Django JSON 时间
热门文章
- OC第六课
- CF 447A(DZY Loves Hash-简单判重)
- Xcode 自己主动生成版本技术最佳实践
- #定位系统性能瓶颈# sysdig
- Catalan数(卡特兰数)
- FreeWheel基于Go的实践经验漫谈——GC是大坑(关键业务场景不用),web框架尚未统一,和c++性能相比难说
- Codeforces--630N--Forecast(方程求解)
- Makefile 文件怎么写
- [python 基础]python装饰器(一)添加functools获取原函数信息以及functools.partial分析
- django的admin后台管理如何更改为中文