2016-12-06 95 views
-1

假設我有一個矩陣An*n並且想要對角地填寫條目。 首先,我想填充主對角線,然後填充主對角線上方的對角線,最後依此類推。 然後低於主對角線對角填充條目的算法

第一對角線我要填寫主對角線即在red顏色,則對角線它上面即在​​顏色,然後低於主對角線即在purple顏色對角線。

然後主要的概念是在填充主對角線之後,我想填充它上面的對角線,然後在它下面,然後在它上面,在它下面填充矩陣。

假設我有條目1-64,我想對角填充。

+0

你嘗試過什麼?你在用什麼語言?記憶是如何佈置的? – paddy

+0

@paddy我只是想寫算法,不用任何特定的語言 – Infinity

+0

那麼,你有什麼嘗試? – paddy

回答

1

考慮到沒有語言或您的矩陣建立信息...

一個好的策略是:

  • 至於經常檢查你自己的空值和IOO例外。

    1. 從[0,0]開始,用循環填充第一條對角線。 (a11,a22,...)
    2. 循環條件行/列<尺寸,因爲它是一個n * n
    3. 在前一循環內還有兩個循環。第一個循環應該在第一個(a12,a23 ..)之上做另一條對角線。第二個循環應該做的對角線下方...

這裏的東西我趕緊跑了。希望能幫助到你。

注意:它說//做些什麼..是你需要改變你的細胞做你需要的任何東西的地方。我會假設你使用的對象會改變顏色..?

package temp; 

import java.util.Arrays; 

public class DiagFiller { 

private int dimension; 

public DiagFiller(int dimension){ 
    int[][] matrix = new int[dimension][dimension]; 

    // Initialize your array cells. 
    for(int row = 0; row < matrix.length; row++){ 
     for(int col = 0; col < matrix[row].length; col++){ 
      matrix[row][col] = 0; // Initialize matrix value here 
     } 
    } 

    // For middle initial diagonal 
    for(int row = 0; row < dimension; row++){ 
     for(int col = 0; col < dimension; col++){ 
      if(row == col){ 
       // Do something to this cell. 
      } 
     } 
    } 

    // For filling rest of matrix 
    for(int i = 1; i < dimension*2; i++){ 

     // Loop for above diagonals. 
     int row = 0; 
     int col = i; 
     while(col < dimension){ 
      matrix[row][col] = i; // Do something to above diagonal. 
      row++; 
      col++; 
     } 

     // Loop for below diagonals. 
     row = i; 
     col = 0; 
     while(row < dimension){ 
      matrix[row][col] = i; // Do something to below diagonal. 
      row++; 
      col++; 
     } 
    } 

    // Print your array cells. 
    for(int row = 0; row < matrix.length; row++){ 
     for(int col = 0; col < matrix[row].length; col++){ 
      System.out.print(matrix[row][col] + " "); 
     } 
     System.out.println(); 
    } 
} 


public static void main(String args[]){ 
    DiagFiller df = new DiagFiller(8); 
} 

}

+0

while Loop對於上面的對角線將一次填充一個對角線? – Infinity

+0

int行不應該初始化爲1 – Infinity

+0

是的,它將按照您提到的填充每個對角線從頂部/左側到底部/右側的順序進行。 –

0

我試圖解決您的問題,只是爲了讓您粗略瞭解如何實現。

它可以根據您的要求進一步概括。

我的代碼是在Java中,你可以看到它在這裏:http://ideone.com/L4zu2j

編輯爲那些誰需要勺子餵養-_-

/* package whatever; // don't place package name! */ 

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     int n= 6; 
     int a[][] = new int[n][n]; 

     // for upper half 
     for(int p=0 ; p < n ; p ++){ 

      for(int i = 0 + p ; i< n ; i++){ 
       a[i-p][i] = p + 100; 
      } 
     } 

      // for lower half 
     for(int p=1 ; p < n ; p ++){ 

      for(int i = 0 ; i< n -p ; i++){ 
       a[i+p][i] = p - 100; 
      } 
     } 

     // printing array 
     for(int i=0 ; i < n ; i ++){ 
       for(int j=0 ; j < n ; j ++){ 
        System.out.print(a[i][j] + " "); 
     } 


     System.out.println(""); 
    } 
} 
} 

輸出

100 101 102 103 104 105 
-99 100 101 102 103 104 
-98 -99 100 101 102 103 
-97 -98 -99 100 101 102 
-96 -97 -98 -99 100 101 
-95 -96 -97 -98 -99 100 

希望這有助於。詢問是否有疑問。

+0

大聲笑..在投票前澄清...只是不downvote -_- –

+0

更新了廣義的解決方案,希望這有助於現在。 –