假設我有一個矩陣A
的n*n
並且想要對角地填寫條目。 首先,我想填充主對角線,然後填充主對角線上方的對角線,最後依此類推。 然後低於主對角線對角填充條目的算法
第一對角線我要填寫主對角線即在red
顏色,則對角線它上面即在顏色,然後低於主對角線即在purple
顏色對角線。
然後主要的概念是在填充主對角線之後,我想填充它上面的對角線,然後在它下面,然後在它上面,在它下面填充矩陣。
假設我有條目1-64
,我想對角填充。
假設我有一個矩陣A
的n*n
並且想要對角地填寫條目。 首先,我想填充主對角線,然後填充主對角線上方的對角線,最後依此類推。 然後低於主對角線對角填充條目的算法
第一對角線我要填寫主對角線即在red
顏色,則對角線它上面即在顏色,然後低於主對角線即在purple
顏色對角線。
然後主要的概念是在填充主對角線之後,我想填充它上面的對角線,然後在它下面,然後在它上面,在它下面填充矩陣。
假設我有條目1-64
,我想對角填充。
考慮到沒有語言或您的矩陣建立信息...
一個好的策略是:
至於經常檢查你自己的空值和IOO例外。
這裏的東西我趕緊跑了。希望能幫助到你。
注意:它說//做些什麼..是你需要改變你的細胞做你需要的任何東西的地方。我會假設你使用的對象會改變顏色..?
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);
}
}
我試圖解決您的問題,只是爲了讓您粗略瞭解如何實現。
它可以根據您的要求進一步概括。
我的代碼是在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
希望這有助於。詢問是否有疑問。
大聲笑..在投票前澄清...只是不downvote -_- –
更新了廣義的解決方案,希望這有助於現在。 –
你嘗試過什麼?你在用什麼語言?記憶是如何佈置的? – paddy
@paddy我只是想寫算法,不用任何特定的語言 – Infinity
那麼,你有什麼嘗試? – paddy