求助一个算法问题,类似深度遍历之类的吧
如图,设定有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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先你画的这个东西叫"无向图",从一个点出发能回到原点叫做"环"。
去网上搜索"无向图所有的环",就会发现很多现成的算法。
你的问题就是找到长度为3(如果包括起始点就是4的环),如果找到所有的环了,你这个就是顺便的。
补充一下:你提到了复杂度,如果想快,可以在算法中插入判断,一旦环长度超过3就中止这次遍历,另外可以对某些节点做预剪枝,类似L、m的节点会直接被剪掉。