从2D数组创建邻接矩阵

时间:2018-03-24 03:37:14

标签: algorithm adjacency-matrix

我有一个如下数组:

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个邻接。我的问题是如何找到这些邻接?如果可能的话,我想只迭代原始矩阵,以避免使用指数级更大的邻接矩阵。

1 个答案:

答案 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

我会在可能的情况下将问题标记为已回答。