递归旅行推销员喜欢计算

时间:2017-06-24 01:56:46

标签: algorithm recursion go

我的功能有点类似于我试图递归的旅行商问题。我认为它正在工作,但我在使大型数据集上的附加功能正常运行时遇到了一些麻烦。这是我所拥有的... main应该被写为递归,所以我可以调用可变数量的递归... https://play.golang.org/p/Lz8arHybFr

hello
world
hello
wo

1 个答案:

答案 0 :(得分:0)

我想出了2次递归,请检查一下你的数据: (我想你会把它做成平行,所以用2次递归会更容易,就像go rec2(...)一样)

func main() {
    rec(0,0)
}

func rec(a, b int) {
    if a >= len(fl) || b >= len(fl) || a == b {
        return
    }
    aa, bb := fl[a], fl[b]
    if !aa.Connects(bb) {
        rec(a, b+1)
        return
    }
    l := []*Foo{
        aa, bb,
    }
    completeList = append(completeList, l)

    rec2(0, a, b)
}

func rec2(c, a, b int) {
    if c >= len(fl) || a == c || b == c {
        return
    }
    cc, aa, bb := fl[c], fl[a], fl[b]
    if cc.Connects(bb) && aa.Completes(cc) {
         l := []*Foo{
              aa, bb, cc,
         }
         completeList = append(completeList, l)
    }
    rec2(c+1, a, b)
}