如何檢測圖中的環?
從每個節點出發 判斷從這個節點出發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
- js如何檢測上傳圖片的字尾格式JS
- Cartographer原始碼閱讀(9):圖優化的前端——閉環檢測原始碼優化前端
- javascript如何檢測一個圖片是否存在JavaScript
- 磁環電感廠家教你如何檢測環形磁環電感的好壞gujing
- oracle rac 環境檢測Oracle
- Windows中如何檢視heic格式圖片Windows
- dfs檢測是否有環的優化優化
- Linux中如何檢測系統是否被入侵Linux
- 機器學習中如何用篩選器檢測冗餘?機器學習
- 《C專家程式設計》:如何檢測連結串列裡的環(附1)程式設計
- 如何檢測程式碼中是否有重複的id屬性
- 如何設定與檢視Linux系統中的環境變數?Linux變數
- 如何檢測雲服務的效能?
- 如何在spring環境中做單元測試Spring
- DBeaver如何檢視ER圖
- 如何在測試環境中實現 API 模擬呼叫API
- 如何用OpenCV在Python中實現人臉檢測OpenCVPython
- iOS中如何使用多個Target去管理你的專案環境版本(測試環境與線上環境)iOS
- 微信域名檢測線上批次檢測如何實現?——利用域名檢測api介面實現批次檢測工具教程API
- 小米手環3輔助睡眠檢測怎麼開啟?小米手環3開啟輔助睡眠檢測的方法步驟
- Notadd 環境檢測相關資訊(Alpha)
- Facebook如何使用自我監督學習檢測仇恨文字和圖片?
- 從零到一:用深度優先演算法檢測有向圖的環路(應用場景:性格測試)演算法
- 如何選擇測試微信域名檢測介面-域名檢測api介面測試標準API
- 人臉檢測中,如何構建輸入影像金字塔
- 如何快速的檢測電腦是否中毒了
- 在Linux中,什麼是環境變數?如何設定和檢視環境變數?Linux變數
- 【譯】淺談Angular中的變化檢測Angular
- 對等複製中的衝突檢測
- Laravel 原始碼環境檢測類詳細分析Laravel原始碼
- 交換機通過Loopback Detection檢測(介面自環)OOP
- meteor 檢測執行環境,手機或者桌面
- 老司機帶你檢測相似圖片
- 圖片人臉檢測——OpenCV版(二)OpenCV
- Laravel 圖床與顏值檢測結晶Laravel圖床
- APP安全測試 該如何滲透檢測APP存在的漏洞APP