这是一道标准的BFS题,先将题目贴一下:

写这道题就当是复习一下BFS吧

Description

上次的马踏飞燕是不是没玩够?无聊的lg准备编写一款游戏,就是加强版的“马踏飞燕”,在这款游戏中有个一个2000*2000的坐标,把马放在任意一个坐标点,再把燕子放在任意一个坐标点,并且燕子不会移动,马只能按照象棋规则走“日”。若200步之内能“踏”到燕子,则成功。lg不知道该怎么去写,现在请你帮助他。
走“日”说明:当马的坐标为(5,5)的时候,马下一步可以走的坐标有8个点,分别为(4,3)(6,3)(3,4)(7,4)(3,6)(7,6)(4,7)(6,7)

Input

第一行两个整数,马的起始坐标x,y (0<x,y<2000)
第一行两个整数,燕子的坐标 m,n (0<m,n<2000)

Output

若4步之内能“踏”到燕子,则输出“Y”
若4步之内不能“踏”到燕子,则输出“N”

Sample Input

5 5
7 4

Sample Output

Y

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <queue>
using namespace std;
int x, y, n, m, flag;
int dir[8][2] = {1,2,2,1,1,-2,2,-1,-1,-2,-2,-1,-1,2,-2,1};
int vis[2005][2005];
struct node
{  int x, y;
};
void bfs(int startx, int starty)
{  queue<node> q;  node tem;  tem.x = startx;  tem.y = starty;  q.push(tem);  while(!q.empty())  {  if(flag) return ;  node now, nex;  now = q.front();  q.pop();  if(vis[now.x][now.y] <= 199)  //累计步数{for(int i = 0; i < 8; ++i)  {  nex.x = now.x + dir[i][0];  nex.y = now.y + dir[i][1];  if(nex.x <= 0 || nex.x > 2000 || nex.y <= 0 || nex.y > 2000) continue;  if(vis[nex.x][nex.y]) continue;  //这里防止重复访问  if(nex.x == m && nex.y == n)  {  flag = 1;  return ;  }  vis[nex.x][nex.y] = vis[now.x][now.y] + 1;  q.push(nex);  }  }}
}
int main()
{  scanf("%d %d %d %d",&x,&y,&m,&n);  flag = 0;  bfs(x, y);  if(flag==1)  cout << "Y" << endl;  else cout << "N" << endl;  return 0;
}  

这道题目要注意的一点就是题目中说要在4步之内完成,所以我们需要记录一下步数,这里用的方法是 原步数+1,通过构建结构体来实现,这样子每次向各个方向移动都能分别

记录对应的步数。

SDNU 1027 马踏飞燕序相关推荐

  1. SDNU 1027 马踏飞燕(续) 【BFS】

    Description 上次的马踏飞燕是不是没玩够?无聊的lg准备编写一款游戏,就是加强版的"马踏飞燕",在这款游戏中有个一个2000*2000的坐标,把马放在任意一个坐标点,再把 ...

  2. SDNU 1025 马踏飞燕 DFS

    搜了哈发现都在用bfs在做 然而我不会bfs 所以发一哈dfs的代码 虽然马踏飞燕加强版1027是没法用dfs做的23333 #include<cstdio> #include<io ...

  3. oracle大数据应用基础3;

    ------------------------day 1------------------------------------ 1 数据库与数据库管理系统 1.1什么是数据库? 就是一个保存数据用 ...

  4. SDNU OJ 1025 马踏飞燕

    该题是一道使用BFS(广度优先搜索)的经典题目(当然如果你不怕麻烦,DFS也是可以的), 思路很简单,用queue存下各个情况每次都判断是否踏到燕子,并且记得记录深度. Description 无聊的 ...

  5. python 使用sort()函数和正则表达式(lambda)对os.listdir()获取的文件夹文件列表进行重新排序 乱序排序

    # 排序函数,对文件列表进行排序 # 排序函数,对文件列表进行排序(filenames为文件夹文件的文件名的字符串列表) def sort_filenames(filenames):# (1)可以以l ...

  6. LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)

    文章目录 1. 题目 2. 解题 2.1 暴力超时解 2.2 排序+最长上升子序 463 / 3709,前 12.5% 1240 / 9290,前13.3% 1. 题目 给你 n 个长方体 cuboi ...

  7. 插序计Spider.Financial.NumXL.v1.65.42892.1.Win32_64 2CD确准

    插序计Spider.Financial.NumXL.v1.65.42892.1.Win32_64 2CD确准 Sysnopy Coretools vK-2015.06 SP5 Linux32_64 2 ...

  8. leetcode105.从前序与中序遍历序列构造二叉树

    根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15 ...

  9. SDNUOJ 1025.马踏飞燕

    Time Limit: 1000 MS    Memory Limit: 32768 KB Total Submission(s): 920    Accepted Submission(s): 37 ...

最新文章

  1. 笔记本电脑处理器_苹果高管:我们都没有想到M1的性能有那么强|英特尔|处理器|iphone|ipad|笔记本电脑...
  2. 使用Clonezilla克隆系统
  3. 【Android View事件分发机制】滑动冲突
  4. 给GridView中的buttonField添加一个删除确认功能
  5. CentOS 编译Hadoop 2.6 32位
  6. python简述文件目录相对路径_【Python】 配置文件相对路径软件自动执行的工作目录...
  7. Xamarin.Forms Button长按事件
  8. CCIE-LAB-第十三篇-DHCP+HSRPV2+Track+DHCP Realy
  9. php 递归格式化数组,利用php递归实现无限分类 格式化数组的详解
  10. 字符串中的第一个唯一字符
  11. java split空值也保留_Java内存大家都知道,但你知道要怎么管理Java内存吗?
  12. 1流明等于多少lux_要想投影仪画质清晰,投影仪流明和对比度不得不看
  13. swagger -- 前后端分离的API接口
  14. jquery中ajax的post方法,jQuery中Ajax的get、post等方法详解
  15. canoe和python_CANoe开发从入门到精通
  16. 加密软件不能安装软件
  17. 汽车租赁管理系统的设计与实现(JSP+SqlServer在线租车网站)
  18. 遗传算法占用计算机空间,遗传算法
  19. 色彩空间与色彩深度。详细分析相机中sRGB/AdobeRGB、RAW/JPG到底该怎么选
  20. 梦幻西游手游经验任务链计算机,梦幻西游手游经验和道具任务链攻略

热门文章

  1. 低压400瓦同步电机驱动器方案低压400瓦驱动器方案,带霍尔传感器,恒转速,pi调节
  2. Vscode顶部菜单栏消失如何调出
  3. 打造灵动办公新体验,金山数字办公助力建筑央企实现办公“效率+安全“双提升
  4. 微软年度开发者大会,请亚马逊VP来站台?
  5. 元界快讯|工程院院士称6G将实现中国版元宇宙
  6. Java标识符的命名规则和命名规范
  7. 先进非线性控制方法 INDI 快速部署到PX4用于四旋翼控制(part1)
  8. 神经网络原理一个简单的神经网络模型搭建
  9. 重现DenseNet网络(基于keras)
  10. 计蒜客——[NOIP2012]Vigenère 密码