如何恢复对角线读取的NxN矩阵?

时间:2011-02-16 06:25:25

标签: c matrix

假设我有一个2D数组

我有一个数组,'char输入[N] [N]'被某人对角读取。

我的目标是从对角线读取的'char input [N] [N]'数组中重现原始数组'char input_original [N] [N]'

在对角线阅读后,我的输入是,

a d b

c e g ------------------->矩阵A

h f i

现在我想把它作为

a b c

d e f ------------------->矩阵B(input_original array)

g h i

矩阵A是矩阵B的对角线读取输出(db ceg hf i - >将其作为矩阵)

欢迎所有建议。

1 个答案:

答案 0 :(得分:3)

如果它是对角线的话,我只计算通过矩阵的“路径”,例如

1--2  3--4  5
  /  /  /  /|
 /  /  /  / |
6  7  8  9  10
| /  /  /  /
|/  /  /  / 
11 12 13 14 15
   /  /  /  /|
  /  /  /  / |
16 17 18 19 20
|  /  /  /  /
| /  /  /  / 
21 22-23 24-25

也就是说,您按照读取它们的顺序存储索引。完成此操作后,您可以根据这些索引填充矩阵。

因此,在这种情况下最困难的是如何计算路径。您可以按如下方式执行此操作:首先,我们认识到该路径仅包含四个方向:

  • right(R)
  • 右上(UR)
  • down(D)
  • 向左下(DL)

此外,我们认识到只允许一些指示顺序:

  • R-DL
  • DL-DL
  • DL-d
  • DL-R
  • d-UR
  • UR-UR
  • UR-R

使用这些知识计算路径没有问题:我们只需存储最后的方向和当前位置。然后,我们必须通过以下方式计算下一个方向:

  • 如果最后一个方向是UR,我们尝试UR,如果那是不可能的,我们走R. [/ li>
  • 如果最后一个方向是DL,我们尝试DL,如果那不可能,我们走D,如果那也不可能,我们走R。

我希望我没有弄乱任何东西,但我认为这是一种非常实用的方法。