这是一道标准的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. 自主数据类型:在TVM中启用自定义数据类型探索
  2. 疫情可视化,基于知识图谱的AI“战疫”平台如何做?
  3. synchronized 与 Reentrant均为可重入锁 区别后者比前者增加了长时等待可中断 设置是否公平锁 绑定多个条件
  4. 数据挖掘中分类算法小结
  5. 2016.3.2(String 类)
  6. 使用绘图API自定义组件
  7. boost::graph模块使用write_graphviz 输出 BGL adjacency_list 的简单示例
  8. hdu3689(kmp+dp)
  9. Android 应用开发(20)--- 定义自定义应用程序权限
  10. UI设计灵感|逻辑感十足的数据可视化界面设计
  11. HDU 4927 大数运算
  12. 从面试官甄别项目经验的角度,说说如何在简历中写项目经验(java后端方向)
  13. 鸿蒙只是电视机,荣耀智慧屏首发抢先体验:电视只是小功能,鸿蒙系统才是真亮点...
  14. 数据分享和开源软件有助于对抗新型冠状肺炎,开源布道师等;开源之道每周评论2020 03 16...
  15. 谷歌借Google Play重返中国,这次能成功吗?
  16. db2和相关驱动的下载
  17. 二进制1010.0101转换为十进制
  18. ssh报错:no matching host key type found. Their offer: ssh-rsa
  19. item_get - VVIC根据ID取商品详情 API
  20. python爬虫获取豆瓣TOP25电影名称和评分

热门文章

  1. 数据库事务一致性的理解
  2. C语言中变量声明和变量定义的区别
  3. table边框的相关设置
  4. 袁琳 湖北 计算机 导师,袁琳
  5. python实例练习(7)诗歌词汇统计
  6. ONNX Runtime介绍
  7. 学习数控自动编程,先了解这五个步骤
  8. opencv基础简洁版(python)一
  9. HTMLString转成json
  10. Android 视频文件加密