急求数据结构《农夫过河问题》课程设计(C/C++)源代码,编程要体现过河的先后顺序实现农夫过河过程,谢谢

如题所述

第1个回答  2011-05-31
#include<stdio.h>
int s[100],t=0;
void BA(int a[4],int b[4]);
void xu(int a[4])
{
int i,j,k;
for(i=0;i<3;i++)for(j=i+1;j<4;j++)if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
int f(int a[4],int x)
{
int i,j=0,b[4];
for(i=0;a[i];i++)
{
if(i==x)continue;
b[j]=a[i];
if(j&&b[j]==b[j-1]-1)return 1;
j++;
}
return 0;
}
int g()
{
int i,r;
for(i=t-1;i>=t/2;i-=2)
{
for(r=0;r<t-i;r++)if(s[t-r]!=s[i-r])break;
if(r==t-i)break;
}
if(i<t/2)return 0;
else return 1;
}
void huan(int a[4],int b[4],int x)
{
int i;
for(i=0;a[i]!=x;i++);
a[i]=0;
b[3]=x;
xu(a);
xu(b);
}
void AB(int a[4],int b[4])
{
int i;
for(i=0;a[i-1]||i==0;i++)
{
if(f(a,i))continue;
s[t]=a[i];
if(g())continue;
huan(a,b,s[t]);
t++;
if(a[0]==0)break;
BA(a,b);
if(a[0]==0)break;
t--;
huan(b,a,s[t]);
}
}
void BA(int a[4],int b[4])
{
int i;
for(i=0;b[i-1]||i==0;i++)
{
if(f(b,i))continue;
s[t]=b[i];
if(g())continue;
huan(b,a,s[t]);
t++;
AB(a,b);
if(a[0]==0)break;
t--;
huan(a,b,s[t]);
}
}
void main()
{
int i,a[4]={3,2,1},b[4]={0};
AB(a,b);
for(i=0;i<t;i++)
{
if(i%2)printf("农夫从B岸到A岸:");
else printf("农夫从A岸到B岸:");
switch(s[i])
{
case 0:printf("什么都不带");break;
case 1:printf("把狼带过河");break;
case 2:printf("把羊带过河");break;
case 3:printf("把菜带过河");break;
}
printf("\n");
}
}本回答被提问者和网友采纳
相似回答