#include <stdioh>
#include <malloch>
#include <conioh>
/回溯法解决
基本构架
while(){
do{
\\\\\\\
}while(检查是符合格)
if(x[k-1]<=n)
{
if(满足条件){}
else {下一步}
}
else{回溯,尝试下一位置}
}
}/
int a=3,b=3;
//chacuo()中运人两岸需满足商>仆
//注意0商<N仆的现象
int chacuo(int i,int k,int x[])
{
//运两个商人
if(x[k-1]==1)
{
if(i%2==0) {
if(a>=2)
{
if(((a-2)!=0 && a-2<b)||(5-a)<(3-b)) {return -1;}
a=a-2;
}
else return -1;
}
else {
if(a<=1)
{if((a+2<b)||((1-a)!=0&&(1-a)<(3-b))){return -1;}
a=a+2;
}
else return -1;
}
}
//运一个商人
if(x[k-1]==2)
{
if(i%2==0) {
if(a>=1){
if(((a-1)!=0&&a-1<b)||(2-a)<(3-b)){return -1;}
a=a-1;
}
else return -1;
}
else {
if(a<=2){
if((a+1<b)||((2-a)!=0 &&(2-a)<(3-b))){return -1;}
a=a+1;
}
else return -1;
}
}
//运一个仆人
if(x[k-1]==3)
{
if(i%2==0) {
if(b>=1){
if((a!=0&&a<b-1)||((3-a)!=0&&(3-a)<(4-b))){return -1;}
b=b-1;
}
else return -1;
}
else {
if(b<=2)
{
if((a!=0&&a<b+1)||((3-a)!=0&&(3-a)<(2-b))){return -1;}
b=b+1;
}
else return -1;
}
}
//运两个仆人
if(x[k-1]==4)
{
if(i%2==0) {
if(b>=2){
if((a!=0&&a<b-2)||((3-a)!=0&&(3-a)<(5-b))){return -1;}
b=b-2;
}
else return -1;
}
else {
if(b<=1){
if((a!=0&&a<b+2)||((3-a)!=0&&(3-a)<(1-b))){return -1;}
b=b+2;
}
else return -1;
}
}
//运一商一仆
if(x[k-1]==5)
{
if(i%2==0) {
if(a>=1&&b>=1){
if(((a-1)!=0&&a-1<b-1)||(4-a)<(4-b)){return -1;}
a--;b--;
}
else return -1;
}
else {
if(a<=2&&b<=2){
if((a+1<b+1)||((2-a)!=0&&(2-a)<(2-b))){return -1;}
a++;b++;
}
else return -1;
}
}
return 1;
}
//显示
void print(int x[])
{
int i;
for(i=0;x[i]!=0;i++)
{
if((i%2)==0)printf(" 去-->");
else printf(" 返<--");
if(x[i]==1)printf("2商人");
if(x[i]==2)printf("1商人");
if(x[i]==3)printf("1仆人");
if(x[i]==4)printf("2仆人");
if(x[i]==5)printf("1商人1仆人");
}
printf("\n");
}
主函数部分,框架给你了,你动动脑子,自己写吧
商商商商,仆仆仆仆不可能商商过河,不可能商仆过河,只能仆仆过河,一个仆回来,对岸剩仆仆。商商商商仆仆仆仆下面出现几种情况:
1、商商过去,只能商仆回来。商商商仆仆仆商仆下面就只能商仆去,商仆回,没有意义了。
2、商仆过去,对岸仆人多,游戏结束。
3、仆仆过去,一个仆回来,对岸剩3仆。商商商商仆仆仆仆商商不能过去,商仆不能过去,只能一个仆过去,一个仆回来,没有意义。因此,这道题是不可能完成的。
河流
河流分类原则多种多样,按注入地可分为内流河和外流河;内流河注入内陆湖泊或沼泽,或因渗透、蒸发而消失于荒漠中;外流河则注入海洋。中国常以河流径流的年内动态差异进行河流分类,共划分为东北、华北、华南、西南、西北、内蒙古和青藏高原7型。
中国流域面积在100平方千米以上的河流达5万条,其中长江长达6397千米,为世界第三大河;世界上河网密集的地区往往位于湿润气候区,如亚马孙平原,该区的亚马孙河长6480千米,为世界第一大河流。
3名商人各带一名随从乘船渡河,只有一条小船,且此船只能容纳2人,由他们自己划行,随从们密约,在河的任意岸,一旦随从人数比商人多,就杀商人,此密约被商人知道,如何乘船渡河的大权掌握在商人们手中,那么商人们应怎样安排每次乘船方案,才能安全渡河呢是这个题吧
解答是:假设商人为ABC,仆人为DEF,
首先DE过河,E划船回来
EF过河,F划船回来
AB过河,AD划船回来
AC过河,E划船回来
DE过河,D划船回来
DF过河
题目意思应该是只有一条船吧:
一个随从和一个商人先过河
商人划回来
两个随从再过河,一个随从划回来
两个商人再过河,
一个随从和一个商人划回来
两个商人再过河
一个随从划回来
这个时候此岸就有三名随从, 两名商人了 所以不对
是不是无解啊
商人代号A,B,C
随从代号a,b,c
方法如下:
(1)A-a过去,A回来,对面留a
(2)b-c过去,b回来,对面留ac
(3)A-C过去,A-a回来,对面留C-c
(4)B-b过去,C-c回来,对面留B-b
(5)A-C过去,b回来,对面留A-B-C
(6)b-a过去,b回来,对面留A-a,B,C
(7)b-c过去,完成
以上就是关于紧急求助:哪个数学建模的高手帮忙编一个:"商人过河"的程序,周五就要交,拜托全部的内容,包括:紧急求助:哪个数学建模的高手帮忙编一个:"商人过河"的程序,周五就要交,拜托、四个商人四个仆人过河如何过、商人奴仆过河问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)