我將一個沃克x/y座標的元組存儲在一個數組中ArrayBuffet((Int, Int))
。檢查座標是否創建一個循環
步驟代表(0,0)
和(2,1)
之間的旅程可以((0,0), (0,1), (1,1), (2,1))
,((0,0), (1,1), (2,1))
等
麻煩的是,我需要一種方法來測試,如果步行者在圓圈旅行。
E.g.考慮從(0,0)
到(0,1)
,步行者的路徑是((0,0), (1,0), (1,-1), (0,0), (0,1))
。步行者會繞着一圈走。
方法
def hasLoop(path: ArrayBuffer[(Int,Int)]): Boolean = {
if (path.length < 3) return false
else {
for i <- 0 to path.length - 1 {
val temp = path
temp.remove(i)
if (temp.contains(i)) return true
}
return false
}
}
如果沃克訪問在一個單一的旅程座標不止一次。然而,如果步行者從(0,0)
到(0,1)
或甚至到(0,2)
,但然後通過(0,1)
返回相同的路徑,那麼它不應該被看作循環。
任何人都可以爲我的isLoop
方法提供解決方案嗎?
你的循環的定義是不明確的 - 如果我理解正確的話,一個路徑具有循環當且僅當它包含相同的_vertex_(例如'(0,0)')多於一次,但存在多於一個路徑(由_edges_組成(例如'(0,0) - >(0,1) ')通過這個頂點? –