The Hamiltonian path problem is NP-complete in general, so only heuristics could exist if P≠NP.

The rotation-extension heuristic may be the simplest heuristic:

```
Input: undirected graph G with size n
Let P be a path
Let e be a random edge of G
P:=[e]
Loop:
If Extension(G,P)≠∅:
P:=Extension(G,P)
Goto Loop
Let Π be the family of the Posa extensions¹ of P in G
For π in Π:
If Extension(G,π)≠∅:
P:=Extension(G,π)
Goto Loop
{Remark: The heuristic is not able to extend the path, so we must stop}
If P is a hamiltonian path, return P, otherwise stop without returning anything.
Subprocedure: Extension
Input: undirected graph G and a path P⊆G
For x in vertices of G:
if x is connected with one of P's endpoints p:
Return P+(p,x)
Return ∅
1: as defined in https://www.sciencedirect.com/science/article/pii/S0012365X06005097
```

In other words, the program finds extensions and extensions after rotations until there're none, and return a hamiltonian path if there is one.

For more sophiscated heuristics, one can use methods from the Flinders Hamiltonian Cycle Project.