0

這與旅行商問題有關。首先需要生成所有排列,然後附加目的地(與原點相同)。即: 1) ABCD ABDC ....有計算距離排列的算法嗎?

2) ABCDA abdca ....一個

我所有的距離,只需要一個算法來總結起來。我想知道是否有一個算法(C更好),我可以使用這個算法,或者如果有一個現成的解決方案。

+0

所以,給定「abcde」你想總結距離ab,bc,cd,de? – JoshD 2010-10-21 22:53:46

+0

沒錯。只有我的意思是abcda。 – nnn 2010-10-21 22:56:18

+0

你是否也需要獲取排列? – JoshD 2010-10-21 23:04:06

回答

2

這是有點小事。

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

哪裏distance是保持兩個節點之間的距離的二維陣列(矩陣如果你願意)。組應該是一個數組或矢量或節點按順序走過。

如果您還需要獲取每個排列,請使用next_permutation。

這裏有什麼距離可能是一個簡單的例子:

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

注意,這將是你的問題的一個對稱矩陣。

+0

什麼是長度? – nnn 2010-10-21 23:09:31

+0

這意味着節點列表的長度。對於你的情況應該總是一樣的(對於你給出的例子,5應該是一樣的)。 – JoshD 2010-10-21 23:15:23

+0

我正在處理距離函數的switch語句,我不想​​輸入源和目標相反的距離。有什麼我可以做的嗎? – nnn 2010-10-21 23:24:53