微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为河内塔生成一个元组

如何解决为河内塔生成一个元组

我的班级最近向我们介绍了元组,很快就给我们造成了一个著名的“河内塔”问题。本质上,我们应该为河内塔中板块的每次运动创建一个(源,目标)元组。教授给了我们这段代码,没有太多解释:

disposable = apiServiceGroups.getGroupsList(String.format("{\"offset\":%s}",groupCount))
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<GroupsListResponse>() {
                            @Override
                            public void accept(GroupsListResponse groupsListResponse) throws Exception {
                                for (int i = 0; i < groupsListResponse.getGroups().size(); i++) {
                                    String currentName = groupsListResponse.getGroups().get(i).getGroupFullName();

                                    if (groupName.equals(currentName.split(" ")[0])) {
                                        familiar.add(currentName);
                                    }
                                }
                            }
                        },new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                Log.e("thro",Objects.requireNonNull(throwable.getMessage()));
                            }
                        });

我快要亏本了。 (极点分别标记为极点1、2和3。样本输入def hanoi(n,src,des,aux): if n == 1: return ((src,des),) else: return hanoi(n-1,aux,des) + (((src,) + hanoi(n-1,src)) 将产生hanoi(1,1,3,2),指示该步骤从极点1到极点3的运动。)

好的,我知道基本情况是什么。如果我只有1个板,则将其直接从源极移到目标极。除此之外,我知道((1,3),)是递归步骤,旨在模拟将n-1张光盘留在原始堆栈中的时间。但是为什么hanoi(n-1,des)交换aux,des和src的位置让我感到困惑。

我也不太明白为什么hanoi(n-1,src)语句被安排为else:

任何提示和建议将不胜感激!我已经花了好几个小时来观察模式,并且通过画出图形来了解游戏规则,但是我无法理解如何将其转换为计算机(Python)逻辑。

谢谢!

解决方法

有关视觉效果的完整说明

为什么河内(n-1,aux,des,src)交换职位 aux,des和src。

在以下链接中:

https://www.geeksforgeeks.org/python-program-for-tower-of-hanoi/

https://runestone.academy/runestone/books/published/pythonds/Recursion/TowerofHanoi.html

关于最后一个问题:

我也不太明白为什么else:语句被安排为 hanoi(n-1,src,aux,des)+((((src,des),))+ hanoi(n-1,aux,des, src))?

这是因为您需要一组步骤,因此您需要将运动添加到该步骤中。

因此,可以说每个调用都返回一个元组[((src,des),)]的元组,例如,使用哑函数:

def f():
    return((1,2),) + ((2,3),) + ((1,)

它返回每个元组的“和”,这将为您提供一个串联的元组。

,

在n层,您必须将n-1个板从src移至aux(中间存储极):hanoi(n-1,src,aux,des)

然后您将在src上找到最大的板块,可以将其从src移至dest:(((src,)

最后,您必须将所有n-1个板块从aux移到dest(使用src作为新的中间极点):hanoi(n-1,des,src))

因此需要调换职位。

该函数计算所有移动的列表,如下所示 为hanoi(2,'pole1-src','pole2-dest','pole3-aux')

(('pole1-src','pole3-aux'),('pole1-src','pole2-dest'),('pole3-aux','pole2-dest'))```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?