码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 最短Hamilton路径( 二进制 + 状态压缩dp)


    给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。

    Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。

    输入格式

    第一行输入整数 n。

    接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。

    对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z]。

    输出格式

    输出一个整数,表示最短 Hamilton 路径的长度。

    数据范围

    1≤n≤20
    0≤a[i,j]≤107

    输入样例:

    1. 5
    2. 0 2 4 5 1
    3. 2 0 6 5 3
    4. 4 6 0 8 3
    5. 5 5 8 0 5
    6. 1 3 3 5 0

    输出样例:

    18

      

    DP分析:

    用二进制来表示要走的所以情况的路径,这里用i来代替
    例如走0,1,2,4这三个点,则表示为:10111;
    走0,2,3这三个点:1101;
    状态表示:f[i][j];
    集合:所有从0走到j,走过的所有点的情况是i的所有路径
    属性:MIN
    状态计算:如1中分析一致,0–>·····–>k–>j中k的所有情况

    状态转移方程:f[i][j]=min(f[i][j],f[i-(1<



    这个解析和课上的一样%%%%

    《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp_阿正的梦工坊的博客-CSDN博客

    1. #include
    2. using namespace std;
    3. const int N = 21, M = 1 << N;
    4. int n, m;
    5. int f[M][N], weight[N][M]; // weight表示的是无权图
    6. int main(){
    7. cin >> n;
    8. for(int i = 0; i < n; i ++ )
    9. for(int j = 0; j < n; j ++ )
    10. cin >> weight[i][j];
    11. memset(f, 0x3f, sizeof f);
    12. f[1][0] = 0; // 0是起点
    13. for(int i = 0; i < (1 << n); i ++ ){ // i表示所有情况
    14. for(int j = 0; j < n; j ++ ){ // j表示走到哪一个点
    15. if(i >> j & 1){
    16. for(int k = 0; k < n; k ++ ){ // k表示走到j这个点之前,以k为终点的最短距离
    17. if(i >> k & 1){
    18. f[i][j] = min(f[i][j], f[i - (1 << j)][k] + weight[k][j]);
    19. }
    20. }
    21. }
    22. }
    23. }
    24. cout << f[(1 << n) - 1][n - 1] << endl; // 终点是 n-1 的最短距离
    25. // 位运算的优先级低于‘+’‘-’, 所以在需要的情况要加括号
    26. return 0;
    27. }

  • 相关阅读:
    安卓bp文件和mk文件转换
    强化学习知多少?
    Spring核心思想
    LeetCode 每日一题 2022/7/25-2022/7/31
    Go HTTP 调用(上)
    Windows同步yum源
    [中英字幕]EA使用SysML和Simulink的数字电子学仿真
    8 Operators
    WebView输入框软键盘遮挡问题(沉浸状态栏和adjustResize的冲突)
    当我们说“架构”的时候,我们在说什么?---解读《ISO/IEC/IEEE 42010》国际标准
  • 原文地址:https://blog.csdn.net/weixin_63914060/article/details/126128478
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号