博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
队列模拟基本操作I
阅读量:6452 次
发布时间:2019-06-23

本文共 2432 字,大约阅读时间需要 8 分钟。

 

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

#include 
#include
#include
using namespace std;int dx[12]= {-2,-2,-1,1,2,2,2,2,1,-1,-2,-2}, dy[12]= {-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};int main() { int s[101][101],que[10000][4]= {
0},x1,y1,x2,y2; memset(s,0xff,sizeof(s)); //s数组的初始化 int head=1,tail=1; //初始位置入队 que[1][1]=1; que[1][2]=1; que[1][3]=0; cin>>x1>>y1>>x2>>y2; //读入黑马和白马的出发位置 while(head<=tail) { //若队列非空,则扩展队首结点 for(int d=0; d<=11; d++) { //枚举12个扩展方向 int x=que[head][1]+dx[d]; //计算马按d方向跳跃后的位置 int y=que[head][2]+dy[d]; if(x>0&&y>0) if(s[x][y]==-1) { //若(x,y)满足约束条件 s[x][y]=que[head][3]+1; //计算(1,1)到(x,y)的最少步数 tail++; //(1,1)至(x,y)的最少步数入队 que[tail][1]=x; que[tail][2]=y; que[tail][3]=s[x][y]; if(s[x1][y1]>0&&s[x2][y2]>0) { //输出问题的解 cout<
<

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

首先,初始化一个队列(拿脑子想出了一个队列……),然后,定义头指针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之内特判一下,就可以得到了:

#include
#include
#include
using namespace std;int main(){ int x,y,k; for(int i=1;i<=2;i++) { cin>>x>>y; if(x<=5&&y<=5) { if((x==1&&y>=2&&y<=5)||(y==1&&x>=2&&x<=5)||(x==5&&y>=1&&y<=5)||(y==5&&x>=1&&x<=5)||x==2&&y==4||x==4&&y==2||x==4&&y==4) printf("2"); if(x==2&&y==2||x==4&&y==3||x==3&&y==4) printf("3"); if(x==3&&(y>=2&&y<=3)||x==2&&y==3) printf("1"); if(x==1&&y==1) printf("0"); } else { for(int i=6,k=3;i<=max(x,y);i+=2,k++) { if(max(x,y)==i) printf("%d ",k); } } } return 0;}

 

转载于:https://www.cnblogs.com/Zhoier-Zxy/p/8328009.html

你可能感兴趣的文章
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
java二维数组内存模型_C++二级指针第二种内存模型(二维数组)
查看>>
java static import 与 import_Java中的import和static import语句之间有什么区别?
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
java 代替Python_Java总是“沉沉浮浮”,替代者会是Python?
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
java 顶点着色_金属顶点着色器绘制纹理点
查看>>
php扩展有哪些G11,php 几个扩展(extension)的安装笔记
查看>>
ajax长连接 php,ajax怎么实现服务器与浏览器长连接
查看>>
oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
查看>>
php 5.4.24 win32,PHP 5.4.14 和 PHP 5.3.24 发布
查看>>
oracle top pid,Linux Top 命令解析 比较详细
查看>>
grub如何进入linux系统,Linux操作系统启动管理器-GRUB
查看>>
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>