更新拓扑排序算法

This commit is contained in:
2025-06-06 11:26:51 +08:00
parent 429a62a245
commit 8ca8cfece5

View File

@ -1,4 +1,4 @@
class Solution
class TopologicalSort
{
private:
enum class STATUS
@ -9,7 +9,7 @@ private:
};
vector<vector<int>> edges;
vector<Status> visited;
vector<STATUS> visited;
vector<int> sequence;
bool find_cycle = false; // cycle
@ -21,20 +21,20 @@ private:
*/
void deepFirstSearch(int node)
{
visited[node] = Status::SEARCHING;
visited[node] = STATUS::IN_SEARCHING;
for (int neighbor : edges[node]) {
if (visited[neighbor] == Status::UNVISITED) {
if (visited[neighbor] == STATUS::UN_VISITED) {
deepFirstSearch(neighbor);
if (find_cycle) {
return; // unsolvable
}
}
else if (visited[neighbor] == Status::SEARCHING) {
else if (visited[neighbor] == STATUS::IN_SEARCHING) {
find_cycle = true;
return;
}
}
visited[node] = Status::FINISH;
visited[node] = STATUS::FINISHED;
sequence.push_back(node);
}
@ -48,7 +48,7 @@ public:
vector<int> findTopologicalOrder(int numNodes, vector<vector<int>>& linkage)
{
edges.resize(numNodes);
visited.resize(numNodes, Status::UNVISITED);
visited.resize(numNodes, STATUS::UN_VISITED);
// generate adjacency list
for (const auto& info : linkage) {
@ -57,7 +57,7 @@ public:
// deep first search to determine the topological sequence
for (int i = 0; i < numNodes && !find_cycle; ++i) {
if (visited[i] == Status::UNVISITED) {
if (visited[i] == STATUS::UN_VISITED) {
deepFirstSearch(i);
}
}