2017-09-27 89 views
0

我需要使用Java交換二維數組的行和列。我有一個ArrayList,告訴我某個行和列需要去哪裏。例如:交換2D陣列的行和列

ArrayList<Integer> = [2, 0, 1, 3] 
         0 1 2 3 (indexes for illustration) 

上面意味着行0和列0的需要,成爲第2行和第2欄,第1行和第1列需要成爲行0和列0,依此類推。

例如:

int[][] example = { 
    {0, 3, 3, 4}, 
    {0, 1, 0, 0}, 
    {0, 0, 1, 0}, 
    {8, 1, 1, 0} 
}; 

比方說,我們第一次換行,因此 「中間」 的形式是:

// From the list, change rows as follows: 
// 0->2, 1->0, 1->2, 3->3 
int[][] example = { 
    {0, 1, 0, 0}, 
    {0, 0, 1, 0}, 
    {0, 3, 3, 4}, 
    {8, 1, 1, 0} 
}; 

最後,交換列,我們得到所需的輸出:

// From the list, change columns as follows: 
// 0->2, 1->0, 1->2, 3->3 
int[][] example = { 
    {1, 0, 0, 0}, 
    {0, 1, 0, 0}, 
    {3, 3, 0, 4}, 
    {1, 1, 8, 0} 
}; 

請注意,交換可能在位或在一個新的矩陣中,無所謂。 我被困在需要交換列的部分,我不太確定如何在這裏繼續。 這是我到目前爲止已經試過:

public static int[][] makeStandardForm(int[][] m){ 
    //generate list of index swaps 
    List<Integer> l = new ArrayList<Integer>(orderIndexes(m)); 
    int[][] m1 = new int[m.length][m.length]; 

    //Swap rows, working fine 
    for(int i=0; i < m.length; i++){ 
     m1[i] = m[(int)l.get(i)]; 
    } 

    //Swap columns, stuck here? 
    for(int i=0; i < m.length; i++){ 
     //don't know how to swap columns 
    } 
    return m1; 
} 
+0

這是一個正方形,又名'n'x'n'陣列? –

+0

@AyushGupta一直是方陣,最大10x10 – alejandrogiron

回答

1

你要複製的列值一個接一個。

試試這個

public static int[][] makeStandardForm(int[][] m){ 
    //generate list of index swaps 
    List<Integer> l = new ArrayList<Integer>(orderIndexes(m)); 
    int[][] m1 = new int[m.length][m.length]; 
    int[][] m2 = new int[m.length][m.length]; 

    //Swap rows, working fine 
    for(int i=0; i < m.length; i++){ 
     m1[i] = m[(int)l.get(i)]; 
    } 

    //Swap columns, stuck here? 
    for(int i=0; i < m.length; i++){ 
     for (int j = 0; j < m.length; j++) { // I used the fact that matrix is square here 
      m2[j][i] = m1[j][l.get(i)]; 
     } 
    } 
    return m2; 
} 
+0

非常好的解決方案,非常感謝! – alejandrogiron