更新拓扑排序算法

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