[理工] 107 交大 资演 10

楼主: dumpling1234 (dumpling)   2019-01-27 03:01:15

对了板上的答案 发现这题没有答案
所以我想来确认一下我写的方法有没有问题
麻烦有答案 或 板上的大神们 帮我修正
Give a instance for HamEx(G,x) G = (V,E)
V = vertex in G E = edge in G
然后加入ㄧ点 h 不属于 V and 加入ㄧ边 (h,x) 不属于 E
建造ㄧ个新的图为G' = (V + {h}, E + {(h,x)})
然后可以设计ㄧ算法:
0 if(HamP(G))return No; //确认有无 HP
1 if (HamP(G')) then return No; //确认有无 x 非头尾 HP
2 else return Yes;
prove correctness:
已经由第0行确认有无 HP in G
所以只需检查 if there is a HP in G from node u to v so that u,v! = x
Claim : if there isn't a hamiltonian path in G' then
there is a HP in G from node u to v so that u,v! = x
if there isn't a HP in G' 因为 deg(h) =1 所以 h 必定为起始点或终点
则不存在有ㄧ条HP的顺序为 h,x,........ in G'
则在原图 G 中不会存在ㄧ条 HP 为 x 为起点或终点
换种写法
if there is a HP in G from node u to v so that u,v = x
所以将存在有ㄧ条HP的顺序为 x,........ in G
则可以找到ㄧ条HP的顺序为 h,x,........ in G'
所以得证
Time Complexity : O(n^7)+O(1)(加一点和一边) = O(n^7)
预祝大家考试顺利!
作者: FRAXIS (喔喔)   2019-01-27 05:54:00
这问题不是问 u != x and v != x 吗?
作者: Leaving   2019-01-27 07:52:00
第0行怪怪的使HamEx(G, x)为true的G也会使HamP(G)为true吧我是想说把x和相对应的边remove形成G'然后检查3个bool b1, b2, b3b1 = HamP(G)b2 = (!HamP(G'))(说错了好像不用b3)然后return b1 && b2原po加额外点进去的方法应该也可以 只是再要整理一下
作者: FRAXIS (喔喔)   2019-01-27 08:28:00
HamP(G') = true 不代表 HamEx(G, x) = false 吧
作者: Leaving   2019-01-27 08:38:00
欧对想到反例了 是错的QQ感觉把我的G'改成原po的G'应该会对?
作者: FRAXIS (喔喔)   2019-01-27 08:56:00
应该也不对吧 同样的道理HamP(G') = true 只代表存在有一个 HP 开头或是结束在 x不代表 G 中不存在一条 HP 且 x 不在头尾
作者: Leaving   2019-01-27 09:04:00
哦哦懂了 感谢楼上 我再想想

Links booklink

Contact Us: admin [ a t ] ucptt.com