python实现街区最短路径问题

参考:https://blog.csdn.net/qq_25245961/article/details/77522141

描述 
一个街区有很多住户,街区的街道只能为东西、南北两种方向。

住户只可以沿着街道行走。

各个街道之间的间隔相等。

用(x,y)来表示住户坐在的街区。

例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。

现在要建一个邮局,使得各个住户到邮局的距离之和最少。

求现在这个邮局应该建在那个地方使得所有住户距离之和最小;

输入 
第一行一个整数n<20,表示有n组测试数据,下面是n组数据; 
每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0 < x,y < 100,表示某个用户所在街区的坐标。 
m行后是新一组的数据;

输出 
每组数据输出到邮局最小的距离和,回车结束; 

这个题目的特点是要对蛮力法进行优化。 
算法思想: 
可以先对x轴进行遍历,从1到100的每个横坐标点到输入点(x,y)的横坐标的距离和的最小值记为xmin; 
同理,然后对y轴进行遍历,从1到100的每个纵坐标点到输入点(x,y)的纵坐标的距离和的最小值记为ymin; 
求sum = xmin + ymin即为最小距离和。 
算法复杂度:O(m*n),循环次数最多为100*20。

n = input('请输入组数<20:')
n = int(n)
biglist = []
for _ in range(n):

    xmin = 2 ** 32
    ymin = 2 ** 32
    sums = 2 ** 32
    sublist = []
    m = input('请输入坐标组数<100:')
    m = int(m)
    for _ in range(m):
        sublist.append(list(map(int, input().strip().split()[:2])))
    print(sublist[0])       # [1, 2]

    i=1
    for i in range(101):
        if xmin>sums:
            xmin = sums
        sums = 0
        k = 0
        while k sums:
            ymin = sums
        sums = 0
        k = 0
        while k < m:
            sums += abs(j - sublist[k][1])
            k += 1

    print('y轴方向最小和:', ymin)
    print('最小距离和是:',xmin+ymin)

.
 

你可能感兴趣的:(数据结构算法)