Python中查找市民进入市场的最小成本的程序

Python中查找市民进入市场的最小成本的程序

假设有n个城市和m条连接城市的道路。人们需要市场来购买商品。现在,在城市中没有市场,城市之间的道路正在施工中。如果(i)该城市包含市场; (ii)经过市场之处有道路连接城市,则可以在两个城市之间建造双向道路。建造道路的成本为x,建造市场的成本为y,我们必须找出提供市场接入的最小成本。

城市数组’cities’包含有关城市的信息,指定哪些城市可以通过道路连接。

因此,如果输入为n = 4,m = 3,x = 1,y = 2,cities = [[1, 2],[2, 3],[3, 4]],则输出将是4。

我们将遵循以下步骤-

  • 如果x小于等于y,则返回n * x。
  • 否则
    • adj_list: 一个包含列表元素的地图
    • 对于每个城市,执行以下操作:
      • city1:city [0]
      • city2:city [1]
      • 将city2插入adj_list [city1]的末尾
      • 将城市1插入adj_list [city2]的末尾
    • temp:一个新的大小为(n + 1)的列表,初始化值为True
    • 值:0
    • dq:双端队列
    • 对于范围为1到n + 1的cur,执行以下操作:
      • 如果temp [cur]为非零,则:
      • 值:值+x
      • 将cur插入dq的最右端
      • temp [cur]:False
      • 当dq不为空时执行以下操作:
      • 对于每个i adj_list [提取的dq最左元素],执行以下操作:
      • 如果temp [i]为非零,则:
        • 将i插入dq的最右端
        • temp [i]:False
        • 值:值+y
    • 返回值

例子

from collections import defaultdict, deque
def solve(n, m, x, y, cities):
   if x <= y:
      return n * x
   else:
      adj_list = defaultdict(list)
      for city in cities:
         city1 = city[0]
         city2 = city[1]
         adj_list[city1].append(city2)
         adj_list[city2].append(city1)
      temp = [True] * (n + 1)
      value = 0
      dq = deque()
      for cur in range(1, n + 1):
         if temp[cur]:
            value += x
            dq.append(cur)
            temp[cur] = False
            while dq:
               for i in adj_list[dq.popleft()]:
                  if temp[i]:
                     dq.append(i)
                     temp[i] = False
                     value += y
      return value

print(solve(4, 3, 1, 2, [[1, 2], [2, 3], [3, 4]]))

输入

4, 3, 2, 1, [[1, 2], [2, 3], [3, 4]]

输出

4

Python中查找市民进入市场的最小成本的程序

在这里,我们可以看到四个城市1、2、3和4。如果在城市1建立一个市场,并在(1, 4)和(1,3)之间建造两条道路,总成本将为2+1+1=4。这是最小成本。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程