哈密顿路径

题目描述

有一张n个节点的无向图,对于所有 (i,j),判断 i 和 j 之间是否存在哈密顿路径

1<=n<=24

哈密顿路径:经过每个点恰好一次

乐乐乐乐乐

考虑暴力:dp[i][j][st]表示从i开始到j的经过的点的状态st(st状压每一个点是否被经过)是否可行

转移时枚举一个k,类似Floyd,要求st的并只有k

复杂度:O(n32n),轻轻松松TLE(乐)

奇妙性质:对于任意一点k,哈密顿路径中ij可以拆为kikj(如果存在这条路径,那么一定经过每一个点)

我们钦定1k点,点对(i,j)的路径相当于(i,1)(1,k)两条路径拼接得到

设计新dp:dp[i][st]表示从1出发到j状态为st(st意义同上)是否可行

转移枚举下一个点即可

我们优化掉了一维,且st的状态少一半(不用压第一个点)

复杂度:O(n22n),依然爆炸

取不来小标题

发现dp仅存储可不可行,浪费了

我们再压dp:dp[st]状态为st(st意义同上的上),可以到的点的状压(dp状态、值虽然都是2n状压,但意义不同)

这样就是O(n2n)

考虑统计答案

我们要统计n2个点对(i,j)是否可行

鸽了

本文作者:Juye_Scene

本文链接:https://www.cnblogs.com/JuyeScene/p/18300559

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Juye_Scene  阅读(113)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起