用一个程序解决狼人羊草过河的问题,人需要划船,人不在的时候狼会吃羊,羊会吃草

用一个程序解决狼人羊草过河的问题,人需要划船,人不在的时候狼会吃羊,羊会吃草,第1张

#include <stdio.h>

#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了。。。

谁会要求写出这样没有逻辑的纯靠运气的程序啊。。。

现在的学校真 *** 蛋。。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8215784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存