我發現了一對有趣的項目歐拉問題(81-83)。它們都是通過這個矩陣矩陣的「找到最短路徑」的變體。我將使用Djikstra的最短路徑算法來一次性解決所有這些問題。他們每個人都有自己奇怪的變化,但是這些都可以用各種邊緣設置來模擬(有些問題只能「向右」和「向下」移動,而另一些則是「向上/向下/向左/向右」。)從矩形矩陣組成邊緣
無論如何,我以爲自己已經寫了一個簡潔的方式來概括邊緣構造,使用「模式」列表來爲給定節點指定我可以創建邊緣的哪些相鄰節點。這段代碼片段如下:
def makeGraph(fn="smallMatrix.txt", modes = [(0,1), (0,-1), (-1,0), (1,0)]):
for row in range(0, len(network)):
for col in range(0, len(network[row])):
#create edges
edgesFromNewNode = []
for mode in modes:
try:
#newEdge = (edgeLength, (destination row, col) )
newEdge = ( network[row+mode[0]][col+mode[1]], (row+mode[0] , col+mode[1]))
edgesFromNewNode.append(newEdge)
except IndexError:
pass
edgeCatalog[(row, col)] = edgesFromNewNode
所以我無法理解爲什麼節點(0,0)(左上點)有四個邊緣 - 它應該只有兩個有效問卷(1,0)和(0,1)。然後我意識到,當我將模式掩碼應用到(0,0)時,我得到像(0,-1)和(-1,0)這樣的東西,它們不是索引錯誤 - 他們說使用結束的名單。
在處理row = 0或col = 0時,我可以使用一堆總的if-then-else情況來解決這個問題,但這是很嚴重的。我希望有一種比這更加pythonic的方法。有什麼建議麼?