Python 求一个算法...

古一 · 2020年09月07日 · 最后由 Ouroboros 回复于 2020年09月08日 · 3350 次阅读

现在有这样一个小模块(如图)

有 3 级菜单,每级菜单的选项数量不固定且每级菜单之间有依赖关系。
我想通过一个算法,能让这 3 级菜单的数据进行排列组合,最后用一个列表嵌套字典的形式输出所有组合。
我只知道如果每级菜单之间没依赖的话,用 python 的 itertool 生成笛卡尔积可以轻松解决,
但是有菜单之间有依赖的话,该如何处理呢?求大神支个招。

共收到 11 条回复 时间 点赞

每级菜单之间到底是啥样的依赖关系啊

有依赖关系就不会是排列组合了吧?

就比如图中的,地图服务菜单下,有 4 个子菜单:全部,数据配置,GIS 配置,平面地图;平面地图下又有 4 个子选项:全部,增,删,改。就是有层级关系,就像树状结构一样。

我不知道你们这个是怎么实现的,我说下我个人对菜单的理解吧,我感觉你这个很像数据结构设计里面的树.
举个栗子:
除了顶级菜单,其他菜单都有自己的父级菜单,你把它看作一个树,叶子节点的个数就是你这个做全部组合方式个数
so: 全部组合方式为,从根节点走到叶子节点的全部全部路径

七星瓢虫 回复

对,就是这个意思。所以该怎么写这个代码

古一 回复

三层 for 循环?

所以这个问题抽象出来应该就是,遍历多叉树并获取其全部路径

递归就好了呀

古一 回复
  1. 如果是后端返回给你的,这个菜单应该是存储在某个数据库表,只要写对应的 SQL 就好了
  2. 如果是前端直接写的,应该也是对应的 json 配置数据,直接找他拿,对应数据,遍历就好了(类似遍历文件夹,多层处理,采用深度遍历或者广度遍历都可以,写一个递归就好了)

多叉树路径遍历,如果不考虑栈溢出,递归就行。非叶子节点,一直往下递归,直到叶子节点保存路径

古一 关闭了讨论 10月12日 22:14
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册