Wenn Sie wissen, wie man es mit "modifiziertem BFS" macht, dann können Sie es so machen. Wie schlagen Sie vor, es mit "modifiziertem BFS" zu tun, BTW?
In der Zwischenzeit führt der Algorithmus, der an der Verbindung präsentiert wird, durch erste toposorting den Graph durch. So ist dieser Algorithmus konzipiert.
Nun wird die Toposort-Reihenfolge von DFS algirithm auf seiner Backtracking-Stufe erzeugt. Leider generiert DFS Toposort-Auftrag in umgekehrte Richtung. Aus diesem Grund können wir die spezifische Verarbeitung des Longest-Path-Algorithmus nicht direkt in DFS "einbetten". (Dieser Algorithmus erfordert die Verarbeitung in vorwärts Richtung.) Daher müssen wir zwei-Pass-Ansatz übernehmen: machen Sie pure DFS zuerst, um eine vollständige toposorted-Sequenz zu erstellen, und dann einen zweiten Durchgang, um den längsten Pfad zu finden.
In vielen realen Situationen sind Algorithmen, die auf Toposort basieren, wertvoll, da Knoten der DAG möglicherweise bereits in toposortierter Reihenfolge gespeichert sind. I.e. toposorting wird nur einmal in der Vorverarbeitung durchgeführt. Danach werden verschiedene toposortbasierte Algorithmen effektiv zu sehr effizienten One-Pass-Algorithmen ohne zusätzlichen Speicherbedarf (im Gegensatz zu Algorithmen wie BFS oder DFS, die zusätzlichen Speicher für ihre Stacks, Warteschlangen usw. benötigen).