2011-02-16 21 views
0

假設如果我有一個二維陣列如何恢復對角讀取的NxN矩陣?

我得到了一個數組''字符輸入[N] [N]',這是由某人對角讀取的。

我的目標是再現原始陣列 '字符input_original [N] [N]' 從斜讀 '字符輸入[N] [N]' 陣列

讀取斜後,我的輸入是,

ADB

CEG ------------------->矩陣A

HFI

,現在我想使它作爲

ABC

DEF ------------------->矩陣B(input_original陣列)

GHI

其中矩陣A是矩陣B的對角線讀取輸出(a db ceg hf i - >將其作爲矩陣)

歡迎您提出任何建議。

+0

你問的代碼或算法?無論如何,我認爲一個例子是不夠的.. – ardiyu07 2011-02-16 06:35:52

回答

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 

這是,你存儲在你閱讀的順序索引。你這樣做後,您可以根據這些指標只需填寫你的矩陣。

所以在這種情況下最困難的是如何計算路徑。你可以這樣做如下:首先,我們認識到,路徑完全conists的四個方向:

  • 右(R)
  • 直到(UR)
  • 下(d)
  • 向下向左(DL)

此外,我們認識到,只有方向的部分訂單被允許:

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

使用該知識計算路徑是沒有問題的:我們只需要存儲最後的方向和當前的位置。然後,我們要計算的下一個指示方式如下:

  • 如果最後的方向是UR,我們嘗試UR,如果那是不可能的,我們走R.
  • 如果最後的方向是DL,我們嘗試DL,如果這是不可能的,我們走D,如果這也是不可能的,我們步行R.

我希望我沒有搞砸任何東西,但我認爲這是一個相當實際的方式來做它。