是否有计算距离排列的算法?

发布于 2024-09-28 09:50:54 字数 162 浏览 4 评论 0原文

这与旅行商问题有关。首先需要生成所有排列,然后附加目的地(与起点相同)。 IE: 1) abcd ABC ....

2) ABCDA 阿卜杜卡 ....a

我有所有的距离,只需要一个算法来总结它们。我想知道是否有一种算法(最好是 C)可以用于此目的,或者是否有现成的解决方案。

This is related to travelling salesman problem. First all permutations need to be generated and then the destination (same as origin) attached. I.e.:
1)
abcd
abdc
....

2)
abcda
abdca
....a

I have all the distances and only need an algorithm to sum them up. I wonder if there is an algorithm (C preferable) I can use for this or if there is a ready-made solution somewhere.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心旳酸楚 2024-10-05 09:50:54

这有点微不足道。

int sum = 0;
for (i = 0; i < length-1; i++)
{
  sum += distance[group[i]][group[i+1]];
}

其中 distance 是一个二维数组(如果你愿意的话,可以是矩阵),它保存两个节点之间的距离。 group 应该是一个数组或向量或按顺序排列的节点。

如果您还需要获取每个排列,请使用 next_permutation。

以下是距离可能是什么的简短示例:

int distance[4][4] = {
 {0,2,1,0},
 {2,0,1,2},
 {1,1,0,1},
 {0,2,1,0},
};

请注意,这将是您问题的对称矩阵。

This is kinda trivial.

int sum = 0;
for (i = 0; i < length-1; i++)
{
  sum += distance[group[i]][group[i+1]];
}

Where distance is a 2d array (matrix if you will) that holds the distance between the two nodes. group should be an array or vector or the nodes in order traveled.

If you also need to get each permutation, use next_permutation.

Here's a brief example of what distance might be:

int distance[4][4] = {
 {0,2,1,0},
 {2,0,1,2},
 {1,1,0,1},
 {0,2,1,0},
};

Note that this will be a symmetric matrix for your problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文