经过不同点的最短路径
Shortest path that goes through different points
假设我有几个点:-5,-4,-3,-2,-1,0,1,2,3,4,5
我在点 0,我需要创建一条贯穿点 1,2,3,4,5,-1,-2... 等的线
这条线将从 0 开始,到最短的任何一点结束。
这个例子的答案是这样的 0->1->2->3->4->5->-1->-2->-3->- 4->-5 或者它会先到 -1,然后从负到正,结果相同(5*4=20 长度)。
例如,如果我们从 0->1->-1->2->-2... 结束,它会成为从一点到另一点的最长直线 (1+2+ 3+4+5+6+7+8+9+10=10*11/2=55长)
问题是如何用代码写这个?
这些点也可能由 2 或 3 维点组成,起点可能是 (0,0,0,0) 或其他任何东西,最终直线可以通过所有这些点,但哪种方式会实现最短的线路?
如何把它变成我们眼中所见的代码?
我认为这基本上就是旅行商问题。你有 N 个目的地,每对目的地之间有一个具体的长度,你试图找出访问所有目的地的最短旅行时间。
你有两个不同的方向来追求这个,我可以看到。首先,阅读旅行推销员问题和为它提出的各种算法(这是一个非常著名的算法问题),然后尝试用 C# 实现一个——尽管只是警告你,你应该非常精通数学,因为它不是一道简单的题。或者,您也可以寻找其他人的现有实现,然后在不了解理论基础的情况下直接使用它。
假设我有几个点:-5,-4,-3,-2,-1,0,1,2,3,4,5
我在点 0,我需要创建一条贯穿点 1,2,3,4,5,-1,-2... 等的线
这条线将从 0 开始,到最短的任何一点结束。
这个例子的答案是这样的 0->1->2->3->4->5->-1->-2->-3->- 4->-5 或者它会先到 -1,然后从负到正,结果相同(5*4=20 长度)。
例如,如果我们从 0->1->-1->2->-2... 结束,它会成为从一点到另一点的最长直线 (1+2+ 3+4+5+6+7+8+9+10=10*11/2=55长)
问题是如何用代码写这个?
这些点也可能由 2 或 3 维点组成,起点可能是 (0,0,0,0) 或其他任何东西,最终直线可以通过所有这些点,但哪种方式会实现最短的线路?
如何把它变成我们眼中所见的代码?
我认为这基本上就是旅行商问题。你有 N 个目的地,每对目的地之间有一个具体的长度,你试图找出访问所有目的地的最短旅行时间。
你有两个不同的方向来追求这个,我可以看到。首先,阅读旅行推销员问题和为它提出的各种算法(这是一个非常著名的算法问题),然后尝试用 C# 实现一个——尽管只是警告你,你应该非常精通数学,因为它不是一道简单的题。或者,您也可以寻找其他人的现有实现,然后在不了解理论基础的情况下直接使用它。