倒水问题-广度搜索(带源程序).doc_第1页
倒水问题-广度搜索(带源程序).doc_第2页
倒水问题-广度搜索(带源程序).doc_第3页
倒水问题-广度搜索(带源程序).doc_第4页
倒水问题-广度搜索(带源程序).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 课程设计的主要内容题目描述:如何解决m加仑的桶和n加仑的桶倒出k加仑的水?功能要求及说明:(1)m,n,k为任意的正整数,mk或者nk;(2)动态显示每一个桶的当前水量;(3)如有解至少给出一种解决方案,能给出多种解决方案的可以适当加分。测试用例:若m=3,n=5,k=4,则可以采用如下方法:用三加仑的桶装满水倒入五加仑的桶,再用三加仑桶装一次,倒进五加仑的桶直到装满,这时三加仑的桶里剩下一加仑,然后把五加仑桶的水倒掉,把三加仑里剩下的一加仑倒进五加仑的桶,再用三加仑打一桶水倒进五加仑的桶里,这样五加仑的桶里就装了四加仑水了。每一个桶的当前水量如下:三加仑的桶当前水量 五加仑的桶当前水量 3 0 0 3 3 3 1 5 1 0 0 1 3 1 0 4源文件:#include /C+头文件#include#include#includetypedef struct Node /定义结点前指针和后指针struct Node* parent;int m;int n;char msg100;struct Node* pnext;NODE,*pNode;void traverse(pNode p);/声明遍历函数int a,b,k,i=0;pNode front; /定义队列pNode rear;pNode first;pNode ptail;pNode root=new NODE;/定义根节点void BFS()cout ;coutm=:a n=:b k=:kendl;cout ;cout开始搜索.m=0;root-n=0;strcpy(root-msg,最开始的状态);root-parent=root-pnext=NULL;ptail=p=front=rear=root;while(NULL!=p) /核心while循环 实现广度搜索if(p-mparent=p;pnew1-pnext=NULL;pnew1-n=p-n; pnew1-m=a;strcpy(pnew1-msg,把m倒满 );for(front=root;front!=NULL;front=front-pnext) /for循环用来避免死循环,提高效率,剪枝叶if(front-m=pnew1-m&front-n=pnew1-n)if(pnew1-m!=4 | pnew1-n!= 0)delete pnew1; break;if(front=NULL)ptail-pnext=pnew1; ptail=pnew1;if(p-nparent=p;pnew2-pnext=NULL;pnew2-m=p-m; pnew2-n=b;strcpy(pnew2-msg,把n倒满 );for(front=root;front!=NULL;front=front-pnext)if(front-m=pnew2-m&front-n=pnew2-n)if(pnew2-m!=4 | pnew2-n!= 0)delete pnew2; break;if(front=NULL)ptail-pnext=pnew2; ptail=pnew2;if(p-m!=0)pNode pnew3=new NODE;pnew3-parent=p;pnew3-pnext=NULL;pnew3-n=p-n; pnew3-m=0;strcpy(pnew3-msg,把m倒空 );for(front=root;front!=NULL;front=front-pnext)if(front-m=pnew3-m&front-n=pnew3-n)if(pnew3-m!=4 | pnew3-n!= 0)delete pnew3; break;if(front=NULL)ptail-pnext=pnew3; ptail=pnew3;if(p-n!=0)pNode pnew4=new NODE;pnew4-parent=p;pnew4-pnext=NULL;pnew4-n=0; pnew4-m=p-m;strcpy(pnew4-msg,把n倒空 );for(front=root;front!=NULL;front=front-pnext)if(front-m=pnew4-m&front-n=pnew4-n)if(pnew4-m!=4 | pnew4-n!= 0)delete pnew4; break;if(front=NULL)ptail-pnext=pnew4; ptail=pnew4;if(p-m!=0)pNode pnew5=new NODE;pnew5-parent=p;pnew5-pnext=NULL;pnew5-m=p-m;pnew5-n=p-n;if(p-m = b-p-n) pnew5-n=p-n+(b-p-n); pnew5-m=p-m-(b-p-n);elsepnew5-n=pnew5-n+p-m;pnew5-m=0;strcpy(pnew5-msg,把m倒给n );for(front=root;front!=NULL;front=front-pnext)if(front-m=pnew5-m&front-n=pnew5-n)if(pnew5-m!=4 | pnew5-n!= 0)delete pnew5; break;if(front=NULL)ptail-pnext=pnew5; ptail=pnew5;if(p-n!=0)pNode pnew6=new NODE;pnew6-parent=p;pnew6-pnext=NULL;pnew6-m=p-m;pnew6-n=p-n;if(p-n = a-p-m)pnew6-m=p-m+(a-p-m); pnew6-n=p-n-(a-p-m);elsepnew6-m=pnew6-m+p-n;pnew6-n=0;strcpy(pnew6-msg,把n倒给m );for(front=root;front!=NULL;front=front-pnext)if(front-m=pnew6-m&front-n=pnew6-n)if(pnew6-m!=k | pnew6-n!= 0)delete pnew6; break;if(front=NULL)ptail-pnext=pnew6; ptail=pnew6;if(p-m=k &p-n=0)cout ;cout*endl;cout ;cout已获得第i+1种答案 m nendl;cout ;coutpnext;cout ;cout搜索完成,共有i种答案endl;cout ;cout*parent;p-parent=NULL;pNode r;while(q!=NULL)r=q-parent;q-parent=p;p=q;q=r;q=root;while(q!=NULL)cout ;coutmsg9 &k99)coutsetw(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论