与えられた問題はhttp://www.spoj.com/problems/TOPOSORT/です 。出力形式は次のように特に重要です。
Print "Sandro fails." if Sandro cannot complete all his duties on the list.
If there is a solution print the correct ordering,
the jobs to be done separated by a whitespace.
If there are multiple solutions print the one, whose first number is smallest,
if there are still multiple solutions, print the one whose second number is smallest, and so on.
私がやっていることは、単にエッジを逆にして dfs を実行することです。つまり、ジョブ A がジョブ B の前に終了した場合、 B から A への有向エッジがあります。作成した隣接リストをソートし、後で正しい順序で出力できるように、制約のないノードを個別に保存することで順序を維持しています。2 つのフラグ配列が使用されます。1 つは発見されたノードをマークするためのもので、もう 1 つはすべてのネイバーが探索されたノードをマークするためのものです。
今、私の解決策はhttp://www.ideone.com/QCUmKY (重要な機能は訪問機能です) であり、10 のケースで正しく実行された後に WA を与えるため、実行されてからどこが間違っているのかを理解するのは非常に困難です。私が手作業で行ったすべてのテストケースに対して。