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
订阅专栏 解锁全文
125

被折叠的 条评论
为什么被折叠?



