3种方法遍历商人访问5个城市问题

1. 问题

商人要访问5个城市,问按何种顺序访问所费的时间最短?

2. 问题分析

2.1 最直观的解法

遍历所有的访问顺序,然后计算出所费时间最短的一种,那么问题转化为如何遍历5个城市所有的访问顺序

假设5个城市编号分别为{0, 1, 2, 3, 4},那么问题实际上是一个全排列问题,即这5个数能组成多少种排列顺序,如0→1→2→3→4是一种,4→3→2→1→0也是一种。

学过排列组合立即可以算出来:5! = 120

但最重要的是如何把这120中组合遍历出来

3. 编程的角度思考这个问题

3.1 思路

第0次访问的城市有5中选择方法,

第1次访问的城市有4中选择方法

所以只要在第n次访问时,遍历当前还未访问的城市,然后再访问下一个城市,最后到所有的城市都已访问即可。

这实际上是个递归的思路,第0到4次的访问城市的方法都可用上面的描述处理。

故:

递归的终止条件:所有的城市已被访问

每次递归的步骤:遍历尚未访问的城市,设置一个为已访问,让后进行下一次递归

3.2 python code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值