我有一个如下数组:
a b c d
e f g h
j k l m
n o p q
我的想法是从此创建一个邻接矩阵,仅用于水平和垂直移动,其中成本是目标中的ASCII值。
解决方案将找到以下类型的邻接矩阵(简化为'a'= 1):
a b c d e f g h <- start
a 0 1 0 0 1 0 0 0
b 2 0 2 0 0 2 0 0
c 0 3 0 3 0 0 3 0
d 0 0 4 0 0 0 0 4
e 5 0 0 0 0 5 0 0
f 0 6 0 0 6 0 6 0
g 0 0 7 0 0 7 0 7
h 0 0 0 8 0 0 8 0
^ destination
为简洁起见,我删除了原始矩阵的最后两行。 我已经意识到一行只有一个特定的成本,并且最多有4个邻接。我的问题是如何找到这些邻接?如果可能的话,我想只迭代原始矩阵,以避免使用指数级更大的邻接矩阵。
答案 0 :(得分:0)
与所有上帝问题一样,我需要一些笔和纸。解决方案似乎是以下代码,其中&#39; M&#39;是原始矩阵和&#39; adj。是生成的邻接矩阵,其维度为x和y:
makeAdjacencyMatrix(M,adj)
for row = 0 .. y do
for col = 0 .. x do
val = M[row,col]
loc = row * x + col
above = loc - x
below = loc + x
if loc + 1 < x * y then
adj[loc, loc + 1] = val
if loc - 1 >= 0 then
adj[loc, loc - 1] = val
if above >= 0 then
adj[loc, above] = val;
if below < x * y then
adj[loc, below] = val
return adj
我会在可能的情况下将问题标记为已回答。