我有一个在采访中被问到的问题。
给出的是N
个旅行者,M
个城市的名称以及在城市M
i 和M
j 作为C
ij 。每个旅行者N
i 必须访问S
地方的给定子集M
i 。还有一个数字X
。
所有旅行者都从一个共同的城市开始旅程。
他们可以访问不在其要访问的城市列表中的城市。
旅行者可以在城市中停留任意时间。
他们必须返回原籍城市。
所有城市都已连接。
一个人可以多次访问同一城市。
X < min( {C} )
问题::如果T
个旅行者一起旅行,那么他们在两座城市之间的旅行总费用中节省了(T-1)*X
美元。我们需要确定每个旅行者的游览顺序,以使所有旅行者的总体旅行费用降至最低。
示例测试用例:
输入:
N = 4 M = 4
travellers[N] = { "person_one", "person_two", "person_three", "person_four" }
cities[M] = { "A", "B", "C", "D" }
costs = {
A <--> B = 100
A <--> C = 120
A <--> D = 50
B <--> C = 20
B <--> D = 20
C <--> D = 20
}
target_cities = {
person_one = { "A", "B" }
person_two = { "A", "B", "C", "D" }
person_three = { "A", "C", "D" }
person_four = { "A", "D" }
}
X = 10
Assuming they all start from city A.
输出:
person_one : A -> D ------> B -> D -> A // the extra spacing is for convenience in
person_two : A -> D -> C -> B -> D -> A // understanding, original output can have
person_three : A -> D -> C ------> D -> A // uniform spaces
person_four : A -> D ----------------> A
说明:
- they save 3*10 by travelling to D together
- person two and three save 1*10 from D -> C.
- person one and two travel back to D from B to save 3*10
travelling from D -> A.
到目前为止,我还没有找到解决此问题的任何方法。我想知道我可以采取的方法。