我正在使用集合将矩阵转换成字典,因此我最终可以应用djikstras算法。但是,由于矩阵中存在一些重复的数字,因此我得到的结果不正确
这是一个80 x 80的矩阵,转换为类似于网格的有向图,只能向右或向下移动。
matrix = [[0,1,2], [3,4,5], [6,7,8]]
graph = {
0: [1,3]
1: [2,4]
2: [5]
3: [0,4] ...
}
import collections
def read_numbers(file):
with open(file) as f:
text = f.read()
numbers = []
text = text.replace('\n', ',')
text = text.replace(' ', '')
for s in text.split(','):
numbers.append(int(s))
return numbers
numbers = read_numbers(r'/Users/mango/Desktop/p081_matrix.txt')
SIZE_80x80 = 80 * 80
assert len(numbers) == SIZE_80x80, "Expecting 80x80 matrix!"
matrix = []
for index in range(0, SIZE_80x80, 80):
matrix.append(numbers[index:index+80])
graph = collections.defaultdict(list)
for r, row in enumerate(matrix):
for c, num in enumerate(row):
if c < 80-1:
graph[num].append(matrix[r][c+1])
if r < 80-1:
graph[num].append(matrix[r+1][c])
print(matrix)
但是,矩阵中的数字具有重复项,因此,每个项可能没有4个键,而是每个矩阵有4个,因为矩阵中的不同位置还有另一个键,因此邻居也不同。