Если вам нужен менее кодирующий подход к этому вопросу (поскольку похоже, что ваш исходный топологический порядок был сгенерирован без кода), вы можете вернуться к определению топологической сортировки. Перефразировано из Университета Эмори :
Топологический порядок узлов = порядок (метка) узлов / вершин, такой, что для каждого ребра (u, v) в G, u появляется раньше, чем v в порядке.
Есть два способа, которыми вы могли бы подойти к этому вопросу: с краевой перспективы вершинной перспективы. Я описываю наивную (то есть с некоторой дополнительной пространственной сложностью и сообразительностью, которую вы могли бы улучшить) реализацию обоих ниже.
Подход к краю
Итерация по ребрам в G. Для каждого ребра извлекаем индекс каждой из его вершин в порядке. Сравнил показатели. Если вершина происхождения не ранее, чем вершина назначения, верните false. Если вы перебираете все ребра без возврата false, верните true.
Сложность: O (E * V)
Вершинный подход
Итерация по вершинам в вашем порядке. Для каждой вершины извлеките ее список исходящих ребер. Если любое из этих ребер заканчивается в вершине, которая предшествует текущей вершине в порядке, вернуть false. Если вы перебираете все вершины без возврата false, верните true.
Сложность: O (V ^ 2 * E)