這個問題在一次採訪中被問到,我仍然在尋找最佳解決方案。收斂迷宮:最大週期
給你一個N細胞的迷宮。每個單元可能有多個入口點但不超過一個出口 (即入口/出口點是單向門,如閥門)。
使用從0 到N-1的整數值命名單元格。
你需要找到迷宮中最大週期的長度。如果沒有循環,則返回-1。
INPUT FORMAT
- 第一行具有N
- 第二線具有邊緣[]陣列的N個值的列表中的小區的數目。 edge [i]包含單元格'i'可以在一個步驟中從 到達的單元格編號。如果'我的細胞沒有退出,邊緣[i]爲-1。
OUTPUT FORMAT
- 長度最大週期。
樣品輸入:
4 4 1 4 13 8 8 8 0 8 14 9 15 11 -1 10 15 22 22 22 22 22 21
樣本輸出
我已經試圖用DFS做到這一點,以找到所有可能的週期和打印最大的週期大小。 請讓我知道是否有更好的解決方案。
因此,這將是一個O(N * N),復權。有沒有其他的優化呢? – Bhavesh
@Bhavesh不,它不是O(N^2),它是O(N),正如我在答案中所示。是否有一些不明確的部分讓你覺得它是二次的? –
好吧,你的意思是,如果節點已經被成功檢測到週期訪問過了,我們不應該再次訪問該節點。 – Bhavesh