首页| JavaScript| HTML/CSS| Matlab| PHP| Python| Java| C/C++/VC++| C#| ASP| 其他|
购买积分 购买会员 激活码充值

您现在的位置是:虫虫源码 > C/C++/VC++ > 农夫过河

农夫过河

  • 资源大小:7.67 kB
  • 上传时间:2021-06-29
  • 下载次数:0次
  • 浏览次数:0次
  • 资源积分:1积分
  • 标      签: c++

资 源 简 介

农夫过河问题  用四位二进制数分别顺序表示农夫、狼、白菜和羊的状态 ,即:{dddd} <=> {Farmer, Wolf, Cabbage, Goat} 其中:d={0,1} ,0表示在东岸 1表示在西岸,初始状态为0000,终止状态为1111 ,采用广度优先搜索方法,并使用按位异或的运算符。 step.1 初始化(1)设立route[16]来记录已经考虑过的状态。state来记录当前时刻的状态(状态编号的二进制形式即状态本身)aftercross来记录渔夫当前的选择(渡河对象)会导致的结果状态,passenger作为临时变量,用于表达农夫的选择(对应二进制位为1表示选中该乘客),results[16]={0}用于输出结果(2) 创建“状态”队列    enqueue(states_que,0x00); 且初始状态0000入队(3)创建函数int is_safe(int state),用于判断状态是否安全     不安全时(即羊菜同岸且农夫不在场,狼羊同岸且农夫不在场时),返回0;     安全时,返回1;     step.2(1)使用for循环依次考虑农夫可能的选择:携带羊、白菜和狼,以及农夫只身渡河的情况    for( passenger = 1; passenger<= 8; passenger <<= 1 )(2)如果农夫与当前乘客在河岸的同一侧,则引入aftercross = state^( 0x08|passenger )分析渡河后的情况,如果渡河后状态安全,则将其状态入队,并将当前状态的索引记录到路径数组中(下标索引为后续状态值) route[aftercross] = statestep.3输出过河策略:0表示在南岸,1表示在北岸,初始状态为0000,终止状态为1111。使用for循环将路径结果放于result中,再利用for循环依次输出,且有state= results[i],aftercross =

文 件 列 表

农夫过河.cpp
农夫过河.dsp
农夫过河.dsw
农夫过河.ncb
农夫过河.opt
农夫过河.plg
农夫过河.txt
VIP VIP
0.180814s