c - 如何计算树形图的所有可能排列
问题描述
我有一个代表城市道路的三通图问题,需要计算所有可能的方式 - 排列 - 来建立这些道路。
角色是“你不能在没有完成第 1 关的情况下开始第 2 关”等等更高的关卡
这张图片说明了这里的想法
我试图将其视为每个级别的数组,然后像这样的每个分支的单个列
level1=[1 2]
level2=[3 4
5 6]
和我
;evel1=[1 2 3]
level2=[4 5 0;
6 7 8;
9 10 0]
level3=[11 12;
13 0;
14 15;
16 17;
0 0;
0 0;
18 19]
但我停了下来,不知道如何完成。所以我需要知道如何思考这类问题。
解决方案
您应该研究“抽象数据类型”的概念,因为您当前的设计不会扩展。每次添加新关卡时,您都需要创建一个新数组,然后更新您的代码以了解这个新数组。
在进入下一个级别之前搜索一个级别的过程称为“广度优先”搜索。如果创建列表类型,则可以将当前级别的所有节点添加到列表中,然后在处理列表时,将子节点添加到列表的末尾。
但这并不真正适用于生成所有排列——当你沿着树向下移动时,做“深度优先”更合适,当你不能再往前走时,你所走的路径就是一个排列。
推荐阅读
- docker - 如何在 Docker 容器中运行命令
- java - 如何清理生成的数据绑定文件?
- r - 如何定义引用另一个包中的 S4 类的包示例
- spring-boot - Spring-Boot 2.3.0.RELEASE 无法为 JUnit 5 测试自动装配 RestTemplate
- algorithm - 如何解决其中 f(n) 的递归关系
- email - 如何使用 Gmail-api 检索动态电子邮件
- java - 如何避免使用@ElementCollection 创建链接表?
- javascript - 汇总和平均数据表中的不同列
- r - 动态列选择和应用条件
- reactjs - 使用引导程序对齐每个项目旁边的项目