For this I came up with a DFS recursion.
Do DFS from any node and keep doing it until all nodes are Exhausted. I.E. pick the next unvisited node once you cannot keep recursing.
The element with the highest post number or the last element you visit should be the first element in your topological ordering.
Now do another DFS recursion that executes on every node called DFS_find:
DFS_find(Node): if (node has no neighbors): return 1; otherwise: return 1 + the maximum of DFS_find(Node) for all neighboring nodes
Execute DFS_find(Node) on the first node in your topological ordering. If it returns a number equal to the number of vertices, then a directed path that crosses every node once, exists. Otherwise it does not.
How can I prove whether or not this algorithm is correct?
I think this may be a little less time efficient than the classical way to just do a topological sort and then check if each consecutive pair has an edge between them.