我有一些我決定在Python中執行的項目。簡而言之:我有清單列表。他們每個人都有名單,有時候是單一的,有時候更多。它看起來像這樣:python中的深度優先算法不起作用
rules=[
[[1],[2],[3,4,5],[4],[5],[7]]
[[1],[8],[3,7,8],[3],[45],[12]]
[[31],[12],[43,24,57],[47],[2],[43]]
]
的要點是從numpy的數組的值從該規則(規則表的元素)比較值。我們將一些[x] [y]點與第一個元素(例如第一個元素中的1)進行比較,然後,如果它爲true,則從列表中的第二個數組開始計算[x-1] [j],依此類推。要改變[x] [y]點的值,必須進行五次第一次比較。我已經寫了某事像這樣(主要功能是SimulateLoop,順序切換,因爲simulate2函數後,第二個寫):
def simulate2(self, i, j, w, rule):
data = Data(rule)
if w.world[i][j] in data.c:
if w.world[i-1][j] in data.n:
if w.world[i][j+1] in data.e:
if w.world[i+1][j] in data.s:
if w.world[i][j-1] in data.w:
w.world[i][j] = data.cc[0]
else: return
else: return
else: return
else: return
else: return
def SimulateLoop(self,w):
for z in range(w.steps):
for i in range(2,w.x-1):
for j in range(2,w.y-1):
for rule in w.rules:
self.simulate2(i,j,w,rule)
數據類:
class Data:
def __init__(self, rule):
self.c = rule[0]
self.n = rule[1]
self.e = rule[2]
self.s = rule[3]
self.w = rule[4]
self.cc = rule[5]
NumPy的陣列是從世界一個對象類。規則列表如上所述,通過從另一個程序(GPL許可證)獲得的功能進行解析。
說實話,它似乎工作正常,但它沒有。我正在嘗試其他可能性,沒有運氣。它正在工作,解釋器不會返回任何錯誤,但不知何故數值更改錯誤。規則是好的,因爲它是由我從中獲得解析器的程序提供的(GPL許可證)。
也許它會有所幫助 - 它是Perrier的Loop,修改了Langton的循環(人造生命)。
非常感謝您的幫助! )
如果你從一個實例提供的數據可能有幫助'World'這哪裏失敗。我在這裏看到的唯一看起來稍微不合適的是'i'和'j',從2開始而不是1. – 2011-03-31 22:40:41
此外,所有'else:return'行都是不必要的,只需放入一個'return'語句在最外面的「if」之外,它會做同樣的事情。 – 2011-03-31 22:42:06
不幸的是陣列是大的(至少50x50)。它由0到64的一些數字填充,形成適當的構形以創建迴路形狀。算法用於測試陣列中'像素'的4個鄰居。基於此,狀態由規則中的第6個值改變。但是,當然,首先5個值必須相等(狀態我們想改變,4個鄰居)爲規則(1-5)中的值。 它從2開始,而不是1或0,因爲我不想更改前兩列和2行。循環從第3行和第3列開始。 Thx諮詢與回報,我會做到這一點。 – 2011-03-31 23:39:29