Это довольно тривиально.
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},
};
Обратите внимание, что это будет симметричная матрица для вашей задачи.