目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
一、题目描述
小王是一名基站维护工程师,负责某区域的基站维护。
某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站x到基站y的距离,与基站y到基站x的距离并不一定会相同。
小王从基站1出发,途径每个基站1次,然后返回基站1,需要请你为他选择一条距离最短的路线。
二、输入描述
站点数n和各站点之间的距离(均为整数)。
如:
3 {站点数}
0 2 l {站点1到各站点的路程}
1 0 2 {站点2到各站点的路程}
2 1 0 {站点3到各站点的路程}
三、输出描述
最短路程的数值。
四、解题思路
- 创建二维数组,用于存储各基站之间的距离;
- 通过双重循环,将输入的距离数据存入二维数组中;
- 创建一个一维数组,初始化数据为1,用于标记基站的访问情况;
- 递归调用函数,计算最短路线;
- 已经访问的基站数n 等于 arr1-1时,表示已经访问了所有的基站,需要返回到基站1,此时将当前距离sum加上从当前基站到基站1的距离arr[currentNumber][0],并更新最小距离min;
- 遍历除基站1以外的其它基站,如果该基站未被访问(arr1[i] != 0),则将其标记为已访问arr1[i] = 0,递归调用,参数为下一个基站的编号i、已访问基站数量n+1、已经累计的距离和;
- 将已访问的基站标记为未访问;
- 输出最小距离min;
五、Python算法源码
def get(arr, arr1, now, n, total):
global min_distance
if n == len(arr1) - 1:
total += arr[now][0]
min_distance = min(min_distance, total)
return
for i in range(1, len(arr1)):
if arr1[i] != 0:
arr1[i] = 0
get(arr, arr1, i, n + 1, total + arr[now][i])
arr1[i] = 1
def shortest_distance(n, distances):
global min_distance
arr = []
for i in range(n):
arr.append(distances[i])
arr1 = [1] * n
get(arr, arr1, 0, 0, 0)
return min_distance
六、效果展示
1、输入
3
0 2 1
1 0 2
2 1 0
2、输出
3
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。