文章目录

  • 问题描述 :
  • 输入说明 :
  • 输出说明 :
  • 输入范例 :
  • 输出范例 :
  • 思路分析
  • 伪码实现
  • 事故现场
    • 第一次提交
  • 分析与总结
  • 如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步
  • 这个写的真的有点久,请不要白嫖

问题描述 :

  • 目的:使用C++模板设计顺序队列的抽象数据类型(ADT)。并在此基础上,使用顺序队列ADT的基本操作,设计并实现简单应用的算法设计。

  • 内容:(1)请参照顺序栈的ADT模板,设计顺序队列的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的顺序栈ADT原型文件,自行设计顺序队列的ADT。)

  • (2)ADT的简单应用:使用该ADT设计并实现若干应用顺序队列的算法设计。

  • 应用1:要求设计一个算法,使用顺序队列,设计并实现农夫过河问题的算法。(问题的描述参见课件)

  • 参考函数原型:

template<class ElemType>
void farmerProblem(SqQueue<ElemType> &S);

输入说明 :

无输入

输出说明 :

过河序列(倒叙输出)

输入范例 :

(空)

输出范例 :

1111
0110
1110
0010
1011
0001
1001
0000

思路分析

  • 像这一类属于在一堆状态中找路径得问题,完全写思路比较困难,只有一个我觉得还行得连接。农夫过河


  • 综上所述:

    • 通过按位与,来判定物体的位置
    • 通过按位或,来实现上船
    • 通过按位异或,来实现改变过河,从而改变状态
  • 整体过程

伪码实现

  • 判定各个物体位置的函数
//获取各个物体的位置:
//      如果为0,说明在南岸,错误的地方
//      如果为1,说明在北岸,正确的地方
int oriented(int st,int thing){ return (st & thing) != 0;}
  • 判定状态是否安全:危险状态总归会有羊,所以通过羊来判定该状态下,人是否存在
int isSafe(int st)
{if(oriented(st,goat) == oriented(st,wolf) && oriented(st,goat) != oriented(st,farmer)){return 0;}if(oriented(st,goat) == oriented(st,cabbage) && oriented(st,goat) != oriented(st,farmer)){return 0;}return 1;
}
  • 整个过程中要用到计步器,防止走回头路,总共就16种状态,所以通过各个状态值为索引,来标记各个状态。

    • 第一步,就走了初始状态,所以需要标记
int steps[16] = {0};
steps[origin] = 1;
  • 要使用一个数组来记录坐标
int route[16]={0};//用于记录走过的路线,注意这里是逆向记录的

  • 整体函数
void farmerProblem(SqQueue<ElemType> &S)
{int origin = 0;int steps[16] = {0};//用于标记所有走过的状态int route[16]={0};//用于记录走过的路线,注意这里是逆向记录的steps[origin] = 1;//定义一个当前的脚步int station = origin,nextSt;//将当前的步骤入栈S.enQueue(station);while(!S.QueueisEmpty() && steps[15] == 0){//   cout<<"当前的状态为:"<<station<<endl;S.deQueue(station);for(int i = 1;i <= 8;i = i << 1){//当前的物体和人的组合是相同,可以过河if(oriented(station,i) == oriented(station,farmer)){//下一个位置实现过河nextSt = station ^ (i | farmer);if(isSafe(nextSt) && steps[nextSt] == 0){steps[nextSt] = 1;S.enQueue(nextSt);route[nextSt] = station;}}}}}

事故现场

第一次提交

分析与总结

  • 针对经常使用的量,为了方便理解,最好将的之设为枚举型变量,既便于理解,又便于使用

  • 关于C++中的进制转换函数,详见进制之间的相互转换,C++自带的函数
#include<bitset>
cout<<std::bitset<4>(temp)<<endl;
  • 解决这样一个问题是很高兴的,也是很有成就感的,但是单独解决这样一个问题是要想好多东西的,是很累的。所有的收获都在上面,写了好几个小时

如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步

这个写的真的有点久,请不要白嫖

顺序队列模板简单应用算法设计:农夫过河(这个比较难,我自己都觉得难)相关推荐

  1. dhu 4.1 队列模板简单应用算法设计:士兵队列训练

    队列模板简单应用算法设计:士兵队列训练 时间限制: 1S类别: DS:队列->队列定义及应用 晚于: 2022-05-04 23:55:00后提交分数乘系数50% 截止日期: 2022-05-0 ...

  2. 队列模板简单应用算法设计:士兵队列训练

    问题描述 : 目的:使用C++模板设计队列(链队列和顺序队列)的抽象数据类型(ADT).并在此基础上,使用队列ADT的基本操作,设计并实现简单应用的算法设计. 内容:(1)请参照栈的ADT模板,设计队 ...

  3. HTML5期末大作业:花甲美食网站设计——精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品

    HTML5期末大作业:花甲美食网站设计--精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品 常见网页设计作业题材有 个人. ...

  4. 网页设计作业花甲美食网站设计——精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品

    HTML5期末大作业:花甲美食网站设计--精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品 常见网页设计 文章目录 HTML ...

  5. 用BFS(广度优先搜索queuelist)算法解决农夫过河问题

    用BFS(广度优先搜索queue&&list)算法解决农夫过河问题 一.问题需求分析 一个农夫带着一只狼.一只羊和一棵白菜,身处河的南岸.他要把这些东西全部运到北岸.问题是他面前只有一 ...

  6. 简单排序算法设计(Java)

    总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){for(int i=0;i ...

  7. 数据结构课程设计--农夫过河

    农民过河 [摘要] 农民问题即一个农民带着一只狼.一只羊和一棵白菜,身处河的南岸,他需要把这些东西全部运到河的北岸.而他只有一条小船,且这只小船小到只能容下他和一件物品,另外只有农民能撑船.农民不能留 ...

  8. 队列的基本操作_算法设计:数据结构-队列

    一.队列 1.队列的概念 队列是一种"先进先出(first in first out)"的数据结构,它是一种有序线性表的抽象数据类型.队列在计算机 领域的应用也相当的广泛,例如计算 ...

  9. 高仿英雄联盟游戏网页制作作业 英雄联盟LOL游戏HTML网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品

最新文章

  1. 利用Diferencia和Java微服务进行分接比较测试
  2. Mac修改系统用户名好方法(文件无丢失)
  3. 用C#编写ActiveX控件
  4. 组播理论知识的补充笔记
  5. 一站式解决,Android 拍照 图库的各种问题
  6. mysql操作窗口如何设置粘贴,Access6.5在表中复制和粘贴数据
  7. 【万字长文】Spring Cloud Alibaba 开箱即用!
  8. 飞鸽传书写每行都认认真真
  9. C++《STL和泛型编程》算法accumulate、for_each、sort简单使用例子
  10. 北京联通 烽火光猫+烽火HG680 不拆机破解
  11. ArgularJS和mdui的对话框冲突的解决方案
  12. 【视频编码格式】全面解析
  13. SVN版本管理的回滚(SmartSVN)
  14. ONNXRUNTIME_EXCEPTION : Non-zero status code returned while running Where node. Name:‘Where‘
  15. Unable to build Hibernate SessionFactory和Caused by: org.hibernate.tool.schema.spi.SchemaManagementEx
  16. 大疆FPGA/芯片开发工程师(A卷、B卷)笔试题详解
  17. [ACM]辽宁省赛2010 (HZNU 1081-1089)
  18. 苹果支付v2 通知(订阅/退款回调通知)
  19. 云呐|如何对酒店固定资产进行日常管理
  20. localhost 拒绝了我们的连接请求。Swagger

热门文章

  1. 长在不同部位逗逗的情况
  2. 学习记录 动态规划实时更新
  3. bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
  4. [Python]利用百度AI的ocr实现屏幕内区域文字识别
  5. 经销商转型为什么要选择移动订货平台?
  6. uniapp微信小程序怎样获取宽高?获取系统信息?微信小程序 获取用户手机屏幕高度与宽度信息等
  7. 围棋的分数计算机,围棋个人比赛中的成绩和名次计算方式
  8. 保险丝(熔断器)基本概述
  9. Spring 的自动装配
  10. 金融资管领域知识图谱的构建和应用