五种解法
暴力DFS
先构图,连边取最小值,无重复边
得到路径数量后,打擂台
暴力DFS+最优性剪枝(prunning)
把中间(第二个及以后的任意-end)的两个city互换,比较是否存在更优路径
状态压缩动态规划
可以优化时间复杂度O(2^n*n^2)
f[i][j],i为经过的city点的二进制表示,j为终点位置
排列问题,不关心顺序,只关心是否经过,可以用二进制方式表示
随机化算法-使用交换调整策略
先构图
计时器/计数器
初始化
调整打擂台
初始化路径:for循环进行交换得到等概率的结果
调整路径:
随机化算法-使用反转调整策略
相同长度才可以反转,不同长度用交换
只有两条边加起来,而交换需要四条边加起来
一个题掌握四种算法
排列式搜索 Permutation Style DFS
最优性剪枝算法 Optimal Prunning Algorithm
状态压缩动态规划State Compression Dynamic Programming (2^n*n)
随机化算法 Randomlization Algorithm 又称为遗传算法 Genetic Algorithm 模拟退火算法 Simulated Annealing