请哪位高手看一下,下面是实现商人过河(商人和仆人各三人)问题的代码,不知道哪里出了问题,卡了个把星

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
struct node1
{
int x;
int y;
int state;
struct node1* next;
};// node;
typedef struct node1 node;
node* top=NULL;
node* bottom=NULL;

void push(int x,int y ,int state)
{
// node* p=new node;
node* p=(node*)malloc(sizeof(node));
p->x=x;
p->y=y;
p->state=state;
p->next=NULL;
if(top==bottom)
bottom=top=p;
else
{
top->next=p;
top=p;
}

}

void pop()
{
if(top==bottom)
{
// delete top;
free(top);
top=bottom=NULL;
}
else
{
node* p=bottom;
for(;p->next!=top;p=p->next);
delete top;
top=p;
top->next=NULL;
}
}

bool IsOk(int x,int y)
{
return x>=0&&x<=3&&y>=0&&y<=3&&(x==3||x==0||x==y);

}

bool IsHistory(int x,int y,int state)
{
if(bottom==NULL)
return false;
node* p=bottom;
while(p!=NULL)
{
if(p->x==x&&p->y==y&&p->state==state)
return true;
p=p->next;
}
return false;
}

bool Du(int x,int y,int state)
{
push(x,y,state);
if(x==0&&y==0)
return true;
if(state==0)
{
if(IsOk(x,y-1)&&!IsHistory(x,y-1,state))
{
if(Du(x,y-1,1))
// Du(x,y-1,1);
return true;
}
if(IsOk(x,y-2)&&!IsHistory(x,y-2,state))
{
// Du(x,y-2,1);
if(Du(x,y-2,1))
return true;
}
if(IsOk(x-1,y-1)&&!IsHistory(x-1,y-1,state))
{
// Du(x-1,y-1,1);
if(Du(x-1,y-1,1))
return true;
}
if(IsOk(x-2,y)&&!IsHistory(x-2,y,state))
{
// Du(x-2,y,1);
if(Du(x-2,y,1))
return true;
}
pop();
return false;
}
if(state==1)
{
if(IsOk(x,y+1)&&!IsHistory(x,y+1,state))
{
// Du(x,y-1,0);
if(Du(x,y+1,0))
return true;
}
if(IsOk(x,y+2)&&!IsHistory(x,y+2,state))
{
// Du(x,y+2,0);
if(Du(x,y+2,0))
return true;
}
if(IsOk(x+1,y+1)&&!IsHistory(x+1,y+1,state))
{
// Du(x+1,y+1,0);
if(Du(x+1,y+1,0))
return true;
}
if(IsOk(x+2,y)&&!IsHistory(x+2,y,state))
{
// Du(x+2,y,0);
if(Du(x+2,y,0))
return true;
}
pop();
return false;
}
}

void main()
{
Du(3,3,0);
for(node* p=bottom;p!=NULL;p=p->next)
cout<<(p->x)<<" "<<(p->y)<<" "<<(p->state)<<endl;
}

void ADOConn::ExitConnect()
{
if(m_pRecordset !=NULL)
m_pRecordset->Close();
m_pConnection->Close();
::CoUninitialize();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-26
莫名其妙,这是电脑程序!
第2个回答  2011-03-26
完全看不懂额,要是没有人回答,那就把分给瓦算了,浪费可耻哈(无耻的某人)~~~
第3个回答  2011-03-26
你这是乱说嘛

请哪位高手看一下,下面是实现商人过河(商人和仆人各三人)问题的代码...
::CoUninitialize();}

紧急求助:哪个数学建模的高手帮忙编一个:"商人过河"的程序,周五就要交...
\/\/运两个仆人 if(x[k-1]==4)

商人过河问题
我认为过河的方法如下:1 一商一仆先过河,仆留商回;2商回后载一仆过河,商留仆回; 3仆回后载一商,商留仆回;4仆回后载一仆一留一回;5仆回后载一商,商留仆回;6仆回后一商一仆上船,商回载仆。这样,保持商比仆多或商仆人数相等就可以安全过河了,呵呵。希望可以帮你解决问题。

商人过河问题
设商人为A B C 所带随从分别为a b c渡河过程:1 商人A带着随从a渡河 2 A将船划回来3 b c两名随从接着划船渡河4 c将船划回来5 A B两名商人划船渡河6 B b主仆二人划船回来7 B C两名商人划船渡河8 仆人a划船回来9 仆人a b划船渡河10 商人C划船回来11 商人C带随从c划船渡河4名商人4名...

数学模型题目关于商人过河问题的方案..
以x1代表商人1,x2代表商人2,x3代表商人3,x4代表随从1,x5代表随从2,x6代表随从3。数组(x1,x2,x3.x4,x5,x6)代表一个顶点,每个顶点都代表一个装袋,比如xi=1表示i在左岸,xi=0代表i不在左岸,比如(1,1,1,1,1,1,1)代表都在左岸,(1,1,1,1,1,0)代表随从3不在左岸。写...

关于商人过河的问题,c语言
额 这个有点难搞

四个商人四个仆人过河如何过
四个商人四个仆人过河的问题是一个经典的逻辑谜题。在这个问题中,四个商人和四个仆人需要过一条河,只有一条小船,且船只能载两人。对岸有一个港口,但港口的位置使得船只能到达对岸后才能掉头回来。问题要求所有商人必须过河,但不能有任何仆人在对岸。以下是润色和纠正错误后的内容:1. 商人不能单独...

在商人们安全过河问题中,若商人和随从各四人,怎样才能安全过河_百度...
渡河问题我是做的不少了,不过经我分析。。。你这题目出错了 类似的渡河题目应是3个商人+3个随从 有法可解。因为1船2个人,情况都被定死的。1、2随从去,1随从回 2、2随从去,1随从回 3、2商人去,1随从+1商人回 4、2商人去,1随从回 5、2随从去,1随从回 6、2随从去,渡河成功 这是...

商人过河问题,想要得到所有的安全过河方案,怎么运行成功 matlab_百度知...
我把 sa=[];sb=[];改成 sa=ones(40,2);sb=ones(40,2);能运行。不知道符合你要求吗。改后的程序在附件中有

四个商人四个仆人过河如何过
商商商商,仆仆仆仆不可能商商过河,不可能商仆过河,只能仆仆过河,一个仆回来,对岸剩仆仆。商商商商仆仆仆仆下面出现几种情况:1、商商过去,只能商仆回来。商商商仆仆仆商仆下面就只能商仆去,商仆回,没有意义了。2、商仆过去,对岸仆人多,游戏结束。3、仆仆过去,一个仆回来,对岸剩...

相似回答