我有一個鏈接節點列表,由代理在鏈接上的移動期間收集。 當他到達目的地時,他必須保存他的路徑,但沒有循環。刪除移動代理路徑中的週期
一種消除循環的方法是通過從源鏈接開始按位置迭代掃描鏈接位置:對於位於i-th
位置的鏈接,從目標鏈接開始掃描路徑,直到遇到第一個鏈接例如,在位置j
(它總是保留i <= j
,因爲掃描進程最遲在i
處停止)。如果我們有j > i
,從位置i+1
到位置j
的鏈接的子路徑對應於一個循環並且可以被消除。
我一直在試圖編寫一個遞歸to-report
這需要初始列表作爲參數,但沒有成功。我的測試代碼給了我循環,但沒有循環沒有路徑是這樣的:
to-report no-cycles [ lista ]
ifelse empty? lista [
report lista ] [
let x1 (first lista)
let rest (butfirst lista)
let rev-rest (reverse rest)
let rev-rest1 (first rev-rest)
ifelse x1 != rev-rest1 [
report no-cycles (butlast rest)
] [
report lista ]
]
end
我不知道這是否是一個好方法。
非常感謝您的幫助
請分享您嘗試過的方式以及缺陷。 –
以上是我試圖讓它工作的代碼,但是對於數字列表(不是鏈接)給了我循環,但沒有循環沒有路徑。 – user1993416