看到这道题,第一个想法就是“搜索”!“回溯”!的确,这种思路是很正确的,BFS和DFS都可以来解决:

  1. #include <cstdlib>
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;
  5. int dx[]= {-,-,-,,,,,,,-,-,-},
  6. dy[]= {-,-,-,-,-,-,,,,,,};
  7. int main() {
  8. int s[][],que[][]= {},x1,y1,x2,y2;
  9. memset(s,0xff,sizeof(s)); //s数组的初始化
  10. int head=,tail=; //初始位置入队
  11. que[][]=;
  12. que[][]=;
  13. que[][]=;
  14. cin>>x1>>y1>>x2>>y2; //读入黑马和白马的出发位置
  15. while(head<=tail) { //若队列非空,则扩展队首结点
  16. for(int d=; d<=; d++) { //枚举12个扩展方向
  17. int x=que[head][]+dx[d]; //计算马按d方向跳跃后的位置
  18. int y=que[head][]+dy[d];
  19. if(x>&&y>)
  20. if(s[x][y]==-) { //若(x,y)满足约束条件
  21. s[x][y]=que[head][]+; //计算(1,1)到(x,y)的最少步数
  22. tail++; //(1,1)至(x,y)的最少步数入队
  23. que[tail][]=x;
  24. que[tail][]=y;
  25. que[tail][]=s[x][y];
  26. if(s[x1][y1]>&&s[x2][y2]>) { //输出问题的解
  27. cout<<s[x1][y1]<<endl;
  28. cout<<s[x2][y2]<<endl;
  29. system("pause");
  30. return ;
  31. }
  32. }
  33. }
  34.  
  35. head++;
  36. }
  37. return ;
  38. }

咱们来模拟以下队列的操作:

首先,初始化一个队列(拿脑子想出了一个队列……),然后,定义头指针head和尾指针tail都为1。

  如果尾指针在head的位置上或者head的前面,则这个queue不是空的或者这个队列中的元素还没有完全处理完。

  相反,判断一个队列是否为空或者其中的元素是否全部处理完毕,那就可以用 tail > head 来判断了。

  当有新的元素加入进来,旧的元素不要就可以tail+1,尾指针向上移一位。

  当然,你也可以用STL的序列式容器queue,也是根据个人习惯的。

  

  但是……

  这道题有个bug。

  我们不妨来倒推,它要去(1,1)这个点,我们就从(1,1)这个点去(x,y)这个位置。

  当我们统计每一个坐标点都能走几步能到达时,得到了这个图:

  可以看出当行数和列数都小于等于5的时候是没有规律的,但当行数和列数是大于5的时候,是以两个为单位依次递增,也就是第六、第七列是3,第八、第九列是4,第十、第十一是5……然后再在1到5之内特判一下,就可以得到了:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int main()
  6. {
  7. int x,y,k;
  8. for(int i=;i<=;i++)
  9. {
  10. cin>>x>>y;
  11. if(x<=&&y<=)
  12. {
  13. if((x==&&y>=&&y<=)||(y==&&x>=&&x<=)||(x==&&y>=&&y<=)||(y==&&x>=&&x<=)||x==&&y==||x==&&y==||x==&&y==)
  14. printf("");
  15. if(x==&&y==||x==&&y==||x==&&y==)
  16. printf("");
  17. if(x==&&(y>=&&y<=)||x==&&y==)
  18. printf("");
  19. if(x==&&y==)
  20. printf("");
  21. }
  22. else
  23. {
  24. for(int i=,k=;i<=max(x,y);i+=,k++)
  25. {
  26. if(max(x,y)==i)
  27. printf("%d ",k);
  28. }
  29. }
  30. }
  31. return ;
  32. }

队列模拟基本操作I的更多相关文章

  1. Codeforces 704A Thor 队列模拟

    题目大意:托尔有一部手机可执行三种操作 1.x APP产生一个新消息 2.读取x App已产生的所有消息 3.读取前t个产生的消息 问每次操作后未读取的消息的数量 题目思路: 队列模拟,坑点在于竟然卡 ...

  2. 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)

    请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...

  3. python--递归(附利用栈和队列模拟递归)

    博客地址:http://www.cnblogs.com/yudanqu/ 一.递归 递归调用:一个函数,调用的自身,称为递归调用 递归函数:一个可以调用自身的函数称为递归函数 凡是循环能干的事,递归都 ...

  4. PTA 银行排队问题之单队列多窗口加VIP服务 队列+模拟

    假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假设顾客总是选择编号最小的窗口. 有些银行会给 ...

  5. 原生JS实现队结构及利用队列模拟‘击鼓传花’游戏

    1. 前言 队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合.队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾. 2.功能说明 enqu ...

  6. 两队列模拟一个栈,python实现

    python实现两个队列模拟一个栈: class Queue(object): def __init__(self): self.stack1=[] self.stack2=[] def enqueu ...

  7. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  8. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列

    题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间. 这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数 ...

  9. [Swust OJ 352]--合并果子(贪心+队列模拟)

    题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

随机推荐

  1. Swagger Annotation 详解(建议收藏)

    转载:https://www.jianshu.com/p/b0b19368e4a8 在软件开发行业,管理文档是件头疼的事.不是文档难于撰写,而是文档难于维护,因为需求与代码会经常变动,尤其在采用敏捷软 ...

  2. Log4j/Log4j2自定义Appender来实现日志级别计数统计及监控

    一.简述 本文主要讲如何基于Log4j2来实现自定义的Appender.一般用途是用于Log4j2自带的Appender不足以满足我们的需求,或者需要我们对日志进行拦截统计等操作时,需要我们自定义Ap ...

  3. 使用Nodpad++正则替换

    例如有以下格式数据: 现在需要将每一行的10位长度的数字串后面增加等号“=”

  4. python - Linux C调用Python 函数

    1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...

  5. LNMP环境的搭建(yum)方法(精)

    第一 先安装nginx nginx在官方CentOS社区yum里面没有,需要在nginx的官方网站去下载yum的配置文件 官方:https://www.nginx.com/resources/wiki ...

  6. Linux端口转发-rinted工具部署、配置、使用

    编者按: 近期由于公司开启定制项目规划,对于每个项目都会开启一个测试服务器,实施方会用到测试服务器的ssh端口.mysql端口.web端口,为了节省资源(公网IP.服务器资源复用),基于rinted工 ...

  7. mysql update ...select的使用 & update 遇到 disable safe 的解决方法

    use `testdb`; update dtable d INNER JOIN new_table n ON d.details = n.details set d.email = n.email, ...

  8. C#中,重新排列panel中的按钮

    https://www.cnblogs.com/hfzsjz/archive/2010/08/13/1799068.html void ArrangeButtons(Panel pn) { , y = ...

  9. 流媒体之HLS——综述(二)

    [时间:2018-03] [状态:Open] [关键词:流媒体,stream,HLS] 本文是上一篇的后续部分,链接如下:HLS协议综述 2 playlist(m3u8)介绍 HLS中的playlis ...

  10. Syncfusion SfDataGrid 导出Excel

    var options = new ExcelExportingOptions { ExcelVersion = ExcelVersion.Excel2013, }; //不需要导出的字段 optio ...