From a12dac92bf46c8d20b64ec794846a85babdf0ff9 Mon Sep 17 00:00:00 2001 From: Powfu <1875065753@qq.com> Date: Wed, 27 Dec 2023 10:57:20 +0000 Subject: [PATCH] =?UTF-8?q?add=202101040022/chapter=5F8/=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=A1=A8.cpp.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Powfu <1875065753@qq.com> --- .../\350\257\276\347\250\213\350\241\250.cpp" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "2101040022/chapter_8/\350\257\276\347\250\213\350\241\250.cpp" diff --git "a/2101040022/chapter_8/\350\257\276\347\250\213\350\241\250.cpp" "b/2101040022/chapter_8/\350\257\276\347\250\213\350\241\250.cpp" new file mode 100644 index 00000000..63167e3a --- /dev/null +++ "b/2101040022/chapter_8/\350\257\276\347\250\213\350\241\250.cpp" @@ -0,0 +1,50 @@ +int** edges; +int* edgeColSize; +int* visited; +bool valid; + +void dfs(int u) { + visited[u] = 1; + for (int i = 0; i < edgeColSize[u]; ++i) { + if (visited[edges[u][i]] == 0) { + dfs(edges[u][i]); + if (!valid) { + return; + } + } else if (visited[edges[u][i]] == 1) { + valid = false; + return; + } + } + visited[u] = 2; +} + +bool canFinish(int numCourses, int** prerequisites, int prerequisitesSize, int* prerequisitesColSize) { + valid = true; + edges = (int**)malloc(sizeof(int*) * numCourses); + for (int i = 0; i < numCourses; i++) { + edges[i] = (int*)malloc(0); + } + edgeColSize = (int*)malloc(sizeof(int) * numCourses); + memset(edgeColSize, 0, sizeof(int) * numCourses); + visited = (int*)malloc(sizeof(int) * numCourses); + memset(visited, 0, sizeof(int) * numCourses); + for (int i = 0; i < prerequisitesSize; ++i) { + int a = prerequisites[i][1], b = prerequisites[i][0]; + edgeColSize[a]++; + edges[a] = (int*)realloc(edges[a], sizeof(int) * edgeColSize[a]); + edges[a][edgeColSize[a] - 1] = b; + } + for (int i = 0; i < numCourses && valid; ++i) { + if (!visited[i]) { + dfs(i); + } + } + for (int i = 0; i < numCourses; i++) { + free(edges[i]); + } + free(edges); + free(edgeColSize); + free(visited); + return valid; +} \ No newline at end of file -- Gitee