使N个人访问M个城市子集的旅行费用降至最低

时间:2018-09-21 18:28:42

标签: algorithm

我有一个在采访中被问到的问题。

给出的是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.

到目前为止,我还没有找到解决此问题的任何方法。我想知道我可以采取的方法。

0 个答案:

没有答案