求助一个算法问题,类似深度遍历之类的吧

发布于 2022-09-12 03:11:02 字数 554 浏览 17 评论 0

WechatIMG99.jpeg

如图,设定有N个节点,相互之间可能存在链接。

问题:
输入数组Arr,Arr为类似['ab', 'ak', 'ad', 'bc', 'bl', 'ck', 'ce', 'dg', 'df', 'ef', 'fm', 'gk’]的数组,标明了两两节点的数据
输入一个M,M代表经过M个节点后(除自己之外),回到出发点。
如何得到不重复的所有组合,时间复杂度要低?
请提供下JS代码或者伪代码。

比如,如下求经过三个节点解
var arr = ['ab', 'ak', 'ad', 'bc', 'bl', 'ck', 'ce', 'dg', 'df', 'ef', 'fm', 'gk']
function analyze(arr, m) {
  // 这个逻辑怎么写的….. = =?

  return []
}

// 比如 m = 3
analyze(arr, 3) => ['adgk','abck'] 


备注:这似乎是一个很低级的算法问题,但我确实比较菜,请各位大神指点下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沧笙踏歌 2022-09-19 03:11:02

首先你画的这个东西叫"无向图",从一个点出发能回到原点叫做"环"。
去网上搜索"无向图所有的环",就会发现很多现成的算法。
你的问题就是找到长度为3(如果包括起始点就是4的环),如果找到所有的环了,你这个就是顺便的。
补充一下:你提到了复杂度,如果想快,可以在算法中插入判断,一旦环长度超过3就中止这次遍历,另外可以对某些节点做预剪枝,类似L、m的节点会直接被剪掉。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文