#include <兄芦胡蚂stdlib.h>
#include <string.h>
#define MAX_STEP 20
//index: 0 - 狼,1-羊,2-草,3-人,value:0-本岸,1-对岸
int a[MAX_STEP][4]
int b[MAX_STEP]
char *name[] =
{
"空手",
"带狼",
"带羊",
"带草羡做带"
}
void search(int iStep)
{
int i
if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4)
{
for (i = 0i <iStepi++)
{
if (a[i][3] == 0)
{
printf("%s到对岸\n", name[b[i] + 1])
}
else
{
printf("%s回本岸\n", name[b[i] + 1])
}
}
printf("\n")
return
}
for (i = 0i <iStepi++)
{
if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0)
{
return
}
}
if (a[iStep][1] != a[iStep][3] &&(a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1]))
{
return
}
for (i = -1i <= 2i++)
{
b[iStep] = i
memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1]))
a[iStep + 1][3] = 1 - a[iStep + 1][3]
if (i == -1)
{
search(iStep + 1)
}
else if (a[iStep][i] == a[iStep][3])
{
a[iStep + 1][i] = a[iStep + 1][3]
search(iStep + 1)
}
}
}
int main()
{
search(0)
return 0
}
开三个线程,一个代表狼,一个代表羊,一个代表白菜。一并李艘船。两个位置。
河有两边绝银迟,
狼跟羊互斥,羊跟白菜互斥。
即他们不能在船不在此岸边的时候同时存在。
狼,羊,白菜的线程去抢船的位置。(船在此岸)(2个位置搏困,去抢吧,抢到了就占个座。。。。)
再开一个线程。。。。OYE~
船判断能不能离岸,不能离就泄空。能就到对岸就把这两个位置上的泄到对岸,船也到对岸。
然后狼,羊,白菜的线程继续去抢船的位置。
船线程继续判能不能离岸。(船上的位置剩余0或1或2时只要2岸不出现互斥,都可以离岸)
能就走,不能就泄空。。。。
如此往复
直到有一天。。。3个都到对岸了。。OK了。。。
谁会要求写出这样没有逻辑的纯靠运气的程序啊。。。
现在的学校真 *** 蛋。。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)