自学Python:帮助农夫过河

作者: 小强聊成长 | 来源:发表于2022-01-18 12:24 被阅读0次

一个农夫在河边带了一匹狼、一只羊和一棵白菜,他需要把这三样东西用船带到河的对岸。

然而,这艘船只能容下农夫本人和另外一样东西。如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜。

那么问题来了,农夫如何解决这个过河问题。

下面直接上代码:

########################

def search(Step):

    # 若该步骤能使各值均为1,则输出结果,进入回归步骤

    if a[Step][0] + a[Step][1] + a[Step][2] + a[Step][3] == 4:

        for i in range(Step + 1):  # 能够依次输出不同的方案

            print('河这边:', end=' ')

            if a[i][0] == 0:

                print('狼', end='  ')

            if a[i][1] == 0:

                print('羊', end='  ')

            if a[i][2] == 0:

                print('白菜', end='  ')

            if a[i][3] == 0:

                print('农夫', end='  ')

            if a[i][0] and a[i][1] and a[i][2] and a[i][3]:

                print("空的", end='')

            print(end='                ')

            print('河对岸:', end=' ')

            if a[i][0] == 1:

                print("狼", end='  ')

            if a[i][1] == 1:

                print('羊', end='  ')

            if a[i][2] == 1:

                print('白菜', end='  ')

            if a[i][3] == 1:

                print('农夫', end='  ')

            if not (a[i][0] or a[i][1] or a[i][2] or a[i][3]):

                print('空着', end='')

            print('\n')

            if i < Step:

                print(' 第 %d 次' % (i + 1))

            if i>0 and i<Step:

                if a[i][3] == 0:  # 农夫在岸这边

                    print("--过河-->  农夫 ", end='')

                    print(name[b[i] + 1])

                else:  # 农夫在对岸

                    print(" <--回来--  农夫 ", end='')

                    print(name[b[i] + 1])

        print('\n\n\n')

        return

    for i in range(Step):

        if a[i] == a[Step]:  # 若该步与以前的步骤相同,取消操作

            return

    # 若羊和农夫不在一起而狼和羊或者羊和白菜在一起,则取消操作

    if a[Step][1] != a[Step][3] and (a[Step][2] == a[Step][1] or a[Step][0] == a[Step][1]):

        return

    # 递归,从带第一种对象开始依次向下循环,同时限定递归的界限

相关文章

网友评论

    本文标题:自学Python:帮助农夫过河

    本文链接:https://www.haomeiwen.com/subject/mqmacrtx.html