分油问题C语言.docxVIP

  • 9
  • 0
  • 约3.6千字
  • 约 6页
  • 2023-11-04 发布于山东
  • 举报
. 设有大小不等的X,Y,Z三个无刻度的油桶,分别能够盛满油X,Y,Z(比如,X=8,Y=5,Z=3),并约定XYZ。 初始时,仅X油桶盛满油,Y和Z油桶为空。要求程序寻找一种最少的分油步聚,在某个油桶中分出T升油(比如T=4)。解: 令三个油桶的盛油情况为倒油过程的状态,则倒油过程就是状态变化的过程。为了记录倒油过程,程序引入倒油状态行列, 将倒油过程中产生的状态存储在行列中。行列的每个元素记录每次分油后各个油桶的分油后各个油桶的盛油量和倒油轨迹等相关信息。 程序频频从行列中取出第一个还未检查过的状态,对该状态下的每个油桶判断其是否能够倒出油,及是否能够倒进油。由于油桶没有刻度, 分油时只能将某个油桶倒满或倒空。程序分别按倒空或倒满两种可能的倒油动作履行不同的办理,产生新的倒油状态, 为防止某个倒油状态在行列中重复出现,程序只将未曾出现过的新状态及其倒油轨迹信息存入行列中,假设程序检查了相当多的状态后,或能找到解,或能确定问题无解。 倒油程序算法如下: 算法---无刻度油桶分油 { 输入各桶容量和目标容量; 将初始状态存入倒油状态行列; 设置其余初始值; do { 对状态行列中第一个还未检查的元素 在还未检查完每个倒出的桶且还未找到解且还未确定无解情况下循环 if(倒出桶有油) 在还未检查完每个桶且还未找到解且还未确定无解情况下循环if(目前桶不是倒出桶且桶还有空) { 确定本次

文档评论(0)

1亿VIP精品文档

相关文档