自学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