Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
493 views
in Technique[技术] by (71.8m points)

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

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


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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...