bfs--P1443 马的遍历
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
跟迷宫一样,找最近距离,显然用bfs,两个方位数组dir1和dir2用来表示马可以走的8个方向,循环判断八个方向,每次判断下一个位置是否越界或是否访问过,若都没有,则下一刻位置可走,并标记
完整代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
int n,m;
int ex,ey;
int dirx[]={,,-,-,,,-,-};
int diry[]={,-,,-,,-,,-};
bool vis[][];
int a[][];
struct node{
int x,y,step;
}nowid,nextid;
inline int read()
{
int x = ,a = ;
char ch = getchar();
while(ch < '' || ch > ''){
if(ch == '-')x = -;
ch = getchar();
}
while(ch <= ''&&ch >= ''){
a = a * + ch - '';
ch = getchar();
}
return x*a;
}
int k=;
inline void bfs(int x,int y){
queue<node> q;
nowid.x=x,nowid.y=y,nowid.step=;
q.push(nowid);
while (!q.empty()){
nowid=q.front();
q.pop();
nextid=nowid;
for (int i = ;i < ;i++){
nextid.x = nowid.x+dirx[i];
nextid.y = nowid.y+diry[i];
if (nextid.x<=n&&nextid.x>=&&nextid.y<=m&&nextid.y>=&&!vis[nextid.x][nextid.y]){
nextid.step=nowid.step+;
vis[nextid.x][nextid.y]=;
a[nowid.x][nowid.y]=nowid.step;
a[nextid.x][nextid.y]=nextid.step;
q.push(nextid);
}
}
}
}
int main(){
n=read(),m=read();
ex=read(),ey=read();
vis[ex][ey]=;
bfs(ex,ey);
for (int i = ;i <= n;i++){
for (int j = ;j <= m;j++){
if (vis[i][j])
printf ("%-5d",a[i][j]);
else
printf ("%-5d",-);
}
cout<<endl;
}
return ;
}
bfs--P1443 马的遍历的更多相关文章
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 最少步数&P1443 马的遍历
1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 q ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 洛谷P1443 马的遍历(bfs,注意输出格式)
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷P1443 马的遍历【BFS】
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷 - P1443 - 马的遍历 - bfs
略有收获的bfs,使用了try_enqueue函数使得加入队列非常方便.性能理论上是一样的因为是inline? 还有就是左对齐是使用%-4d,相对于右对齐的%4d,还有右对齐前导零的%04d,自己试一 ...
- 洛谷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),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...
随机推荐
- 《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框
一.第二章 科学计算器 要检查两个数字是否一样,要使用 all.equal() ,不要使用 == ,== 符号仅用于比较两个整型数是否存在相同 . > all.equal(sqrt(2)^2,2 ...
- Vulkan 之 Debugging
1.可以用validation layers 进行验证: 2.Snapdragon Profiler 使用说明
- 031-PHP获取图像信息
<?php list($width, $height, $type, $attr) = getimagesize("plane.jpg"); echo "宽度为:& ...
- 056-for循环中continue的使用
<?php ; $i <= ; $i++) { //for循环输出数值 == ) //判断变量是否为3的整数倍 { continue;//跳过本次循环剩余语句 } echo "$ ...
- 设置进程用指定IE版本
function IsWOW64: BOOL; begin Result := False; if GetProcAddress(GetModuleHandle(kernel32), 'IsWow64 ...
- 08 SSM整合案例(企业权限管理系统):10.权限关联与控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 10.权限关联与控制 1.用户 ...
- DRF教程10-关系字段
https://www.django-rest-framework.org/api-guide/relations/ 在编程中核心的就是数据结构. 关系字段用来表示model之间的关系,比如外键,m2 ...
- 使用Oracle VM VirtualBox安装CentOS 7.6操作系统
使用Oracle VM VirtualBox安装CentOS 7.6操作系统 ...
- 创建简单web项目
Intellij Idea直接安装(可根据需要选择自己设置的安装目录),jdk使用1.6/1.7/1.8都可以,主要是配置好系统环境变量,tomcat7上tomcat的官网下载压缩包解压即可. 一.创 ...
- <强化学习>基本概念
马尔可夫决策过程MDP,是强化学习的基础. MDP --- <S,A,P,R,γ> AGENT STATE ENV REWARD ,由ENV给出.agent处于状态s下,采取acti ...