# Reduction from Hamiltonian cycle to Hamiltonian path

I'm looking for an explanation on how reducing the Hamiltonian cycle problem to the Hamiltonian path's one (to proof that also the latter is NP-complete). I couldn't find any on the web, can someone help me here? (linking a source is also good).

Thank you.

-
Abaco, my answer, which you accepted, is wrong. Aryabhata has given a correct solution. – Mike Spivey Oct 24 '11 at 21:06
@user96758: I think you're right. Given a vertex, among all the edges attached to it, at least 2 are in a HC (if it exists). In fact, when one of these 2 edges, say $e$ (without loss of generality, $e = \{u,v\}$, from $u$ to $v$), is removed, the new graph will have a HP starting from $v$ and ending at $u$. So we don't need additional vertices to reduce HC problem to HP problem. On the other hand, since the reducing cost is polynomial in all methods mentioned here and by other users, we just proved the same thing. – Shushan Wen Oct 11 '13 at 20:56

For a reduction from Hamiltonian Cycle to Path.

Given a graph $G$ of which we need to find Hamiltonian Cycle, for a single edge $e = \{u,v\}$ add new vertices $u'$ and $v'$ such that $u'$ is connected only to $u$ and $v'$ is connected only to $v$ to give a new graph $G_e$.

$G_e$ has a Hamiltonian path if and only if $G$ has a Hamiltonian cycle with the edge $e=\{u,v\}$.

Run the Hamiltonian path algorithm on each $G_e$ for each edge $e \in G$. If all graphs have no Hamiltonian path, then $G$ has no Hamiltonian cycle. If at least one $G_e$ has a Hamiltonian path, then $G$ has a Hamiltonian cycle which contains the edge $e$.

-
I think you wrong about the reduction from HC to HP (answer #1). If we look about this case : U* ------------ V and implement your reduction: U' -------- U* ------------ V* ----------V'* It is prettry easy to see that in the graph after redcution there is an hemilton path .. (u' -> u -> v -> v') Hope to here your response (maybe I didn't understand the reduction) – Lital Zubery Dec 19 '12 at 13:24
@LitalZubery: If I understood you correctly, you are talking about the special case where G is exactly one single edge? Yes, that should be mentioned, but does not really break down the proof, as a finite number of exceptions will not hurt the NP-Completeness proof. – Aryabhata Dec 19 '12 at 17:20
I am confused, is this valid? – graphtheory92 Apr 21 '15 at 8:49
@graphtheory92: Seems valid to me. What are your concerns? – Aryabhata Apr 26 '15 at 3:04

This is a reduction from undirected Hamilton Cycle to undirected Hamilton Path. It takes a graph $G$ and returns a graph $f(G)$ such that $G$ has a Hamilton Cycle iff $f(G)$ has a Hamilton Path.

Given a graph $G = (V,E)$ we construct a graph $f(G)$ as follows.

Let $v \in V$ be a vertex of G, and let $v',s,t \notin V$.

We want to make $v'$ a "copy" of $v$, and add vertices of degree one; $s,t$, connected to $v,v'$, respectively. (See Figure 1.)

That is, $f(G)$ has vertices $V\cup \{v',s,t\}$ and edges $E\cup\{(v',w)|(v,w)\in E\}\cup\{(s,v),(v',t)\}$.

Now if $G$ has a Hamilton Cycle, we may write it on the form $(v,u),edges,(u',v)$, where $edges$ is some list of edges which must form a simple path $u\ldots u'$ visiting all vertices but $v$. But then, $(s,v),(v,u),edges,(u',v'),(v',t)$ is a Hamilton Path between $s$ and $t$ in $f(G)$.

If on the other hand $f(G)$ has a Hamilton Path, then it must have $s$ and $t$ as endpoints, since they have degree 1. In which case it must (up to reversal) be of the form $(s,v),(v,y),edges',(y',v'),(v',t)$. But then, $G$ has a Hamilton cycle $(v,y),edges',(y',v)$.

-

For the directed case,

Given $\langle G=(V,E)\rangle$ for the Hamiltonian cycle, we can construct input $\langle G',s,t\rangle$: choose a vertex $u \in V$ and divide it into two vertices, such that the edges that go out of $u$, will go out of $s$ and the vertices that get in to $u$, will get in to $t$.

-

The answer mentioned is correct for the purpose of showing reduction, but I have this idea which is faster than the idea presented. Please correct me if I am wrong. If ham path says no for even a single vertex then ham cycle says no. This means that all vertices should now say yes for Ham path(hence one method id to ask each egde).A faster method would be: Pick any vertex. For each of its edge remove the edge and add 2 vertices and join in same fashion as mentioned in the answer. If for any edge removal and addition of 2 new vertices ham path says yes, then output Yes.

Please correct me if I am wrong.

-