如何檢測圖中的環?
從每個節點出發 判斷從這個節點出發DFS 最後是不是又經過了這個節點(visited)
以LC207 Course Schedule為例
HashMap<Integer, List<Integer>> courseDict = new HashMap<>();
boolean[] visited = new boolean[numCourses];
for (int i = 0; i < numCourses; i++) { //pay attention, this i stands for current course
if (isCyclic(i, courseDict, visited)) { //starting from course i, check in this map: courseDict, and maintain a visited map
return false;
}
}
return true;
private boolean isCyclic(Integer currentCourse, HashMap<Integer, List<Integer>> courseDict, boolean[] visited) { //use backtracking to jusge if there is a cycle or not, backtracking is dfs actually
if (visited[currentCourse]) { //path[] is actually visisted[]
return true;
}
if (!courseDict.containsKey(currentCourse)) { //if current couses never have any prerequsite, then we reached the start point, then this is defintiely not a cycle
return false;
}
//before backtracking, mark the node in the path
visited[currentCourse] = true;
boolean ret = false;
for (Integer nextCourse: courseDict.get(currentCourse)) { //for all of its neighbors, is anyone of them is part of the cycle, then break;
ret = isCyclic(nextCourse, courseDict, visited);
if (ret) { //if ret is a cycle, just break
break;
}
}
// after backtracking, remove the node from the path
visited[currentCourse] = false;
return ret; //not understand this.
}
//因為本題就是用數字表示的節點 因此這麼些還算是簡單的,詳細的總結一下
就是對圖中所有的節點進行isCycle的check
然後DFS進行check,在這個過程中需要用到:
currentNode, graphMap, visited來進行控制。注意遞迴結束的條件和backtracking對visited陣列的維護
相關文章
- 如何在 Java 中實現無向環和有向環的檢測Java
- python如何檢測pygame中的碰撞PythonGAM
- Cartographer原始碼閱讀(9):圖優化的前端——閉環檢測原始碼優化前端
- 磁環電感廠家教你如何檢測環形磁環電感的好壞gujing
- dfs檢測是否有環的優化優化
- Windows中如何檢視heic格式圖片Windows
- Linux中如何檢測系統是否被入侵Linux
- 應用於智慧手環產品中檢測戶外紫外強度的感測器
- 如何設定與檢視Linux系統中的環境變數?Linux變數
- 如何檢測雲服務的效能?
- 如何在spring環境中做單元測試Spring
- 檢測金屬圓環表面的凹痕
- 如何用OpenCV在Python中實現人臉檢測OpenCVPython
- DBeaver如何檢視ER圖
- 小米手環3輔助睡眠檢測怎麼開啟?小米手環3開啟輔助睡眠檢測的方法步驟
- 圖神經網路在欺詐檢測與蛋白質功能預測中的應用概述神經網路
- Facebook如何使用自我監督學習檢測仇恨文字和圖片?
- 微信域名檢測線上批次檢測如何實現?——利用域名檢測api介面實現批次檢測工具教程API
- 在Linux中,什麼是環境變數?如何設定和檢視環境變數?Linux變數
- 如何在測試環境中實現 API 模擬呼叫API
- Laravel 原始碼環境檢測類詳細分析Laravel原始碼
- leetcode 面試題02.08.環路檢測 JavaLeetCode面試題Java
- 圖片人臉檢測——Dlib版(四)
- 圖片人臉檢測——OpenCV版(二)OpenCV
- 【譯】淺談Angular中的變化檢測Angular
- 邊框檢測在 Python 中的應用Python
- 如何在SAP C4C的Embedded元件中檢測編輯模式(EditMode)元件模式
- 如何選擇測試微信域名檢測介面-域名檢測api介面測試標準API
- 人臉檢測中,如何構建輸入影像金字塔
- APP安全測試 該如何滲透檢測APP存在的漏洞APP
- SSL證書檢測工具有什麼用?如何檢測SSL證書?
- 如何部署自己的SSD檢測模型到AndroidTFLite上模型Android
- 如何批次檢測隧道HTTP代理的可用性?HTTP
- 如何搭建良好的軟體測試環境?測試環境對軟體測試起到什麼作用?
- php實現自動化執行環境檢測PHP
- 交換機通過Loopback Detection檢測(介面自環)OOP
- 如何檢視Docker容器環境變數,如何向容器傳遞環境變數Docker變數
- 目標檢測中的注意力機制