Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar13 / task01.cpp
diff options
context:
space:
mode:
1 files changed, 0 insertions, 85 deletions
-rw-r--r--Seminar13/task01.cpp85
diff --git a/Seminar13/task01.cpp b/Seminar13/task01.cpp
deleted file mode 100644
index ff33136..0000000
--- a/Seminar13/task01.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include<vector>
-#include<queue>
-#include<iostream>
-
-bool hasCycleRec(const std::vector<std::vector<int>>& graph, int start, std::vector<bool>& visited) {
- visited[start] = true;
-
- for (const auto& vertex : graph[start]) {
- if (visited[vertex])
- return true;
-
- if (hasCycleRec(graph, vertex, visited))
- return true;
- }
-
- visited[start] = false;
-
- return false;
-}
-
-bool hasCycle(const std::vector<std::vector<int>>& graph) {
- std::vector<bool> visited(graph.size(), false);
-
- for (int i = 0; i < graph.size(); i++) {
- if (!visited[i] && hasCycleRec(graph, i, visited)) {
- return true;
- }
- }
-
- return false;
-}
-
-// Използваме алгоритъм на Kahn за топологично сортиране
-bool canFinish(int numCourses, std::vector<std::pair<int, int>>& prerequisites) {
- std::vector<std::vector<int>> graph(numCourses);
-
- for (const auto& edgePair : prerequisites)
- graph[edgePair.first].push_back(edgePair.second);
-
- // Степен на вход на върховете
- std::vector<int> inDegree(numCourses, 0);
-
- for(int i = 0; i < numCourses; i++) {
- for(const auto& vertex : graph[i]) {
- inDegree[vertex]++;
- }
- }
-
- std::queue<int> q;
-
- // Добавяме тези със степен нула. Те ще са първи в топологичната сортировка.
- for(int i = 0; i < numCourses; i++) {
- if(inDegree[i] == 0) {
- q.push(i);
- }
- }
-
- // Правим подобно на BFS търсене.
- // След като "изтрием" върховете със степен на вход 0 има други върхове
- // със степен на вход 0. Те са следващите в топологичната сортировка.
- while(!q.empty()) {
- int currentNode = q.front();
- q.pop();
-
- for(const auto& n : graph[currentNode]) {
- inDegree[n]--;
-
- if(inDegree[n] == 0)
- q.push(n);
- }
- }
-
- // Ако след това обхождане има връх със степен
- // различна от 0, то в графа има цикъл.
- for(const auto& n : inDegree) {
- if(n != 0)
- return false;
- }
-
- return true;
-}
-
-int main() {
-
-} \ No newline at end of file