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

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'] 


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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题