对角填充条目的算法

时间:2016-12-06 05:40:34

标签: matrix

假设我有job_number的矩阵A,并希望对角填充条目。 首先,我想填充主对角线,然后填充主对角线上方的对角线,直到等等。 然后在主对角线下方对角线

首先,我要填充n*n颜色的主对角线,然后填充red颜色的对角线上方的对角线,然后填充green颜色的主对角线下方的对角线。

然后主要概念是在主要对角线填充之后我想填充它上面的对角线,然后在它下面,然后在它上面,在它下面直到矩阵被填充。

假设我有条目purple我想要对角填充。

2 个答案:

答案 0 :(得分:1)

考虑到没有关于矩阵设置的语言或信息......

一个好的策略是:

  • 一如既往地自行检查空值和IOO异常。

    1. 从[0,0]开始使用循环填充第一条对角线。 (a11,a22,...)
    2. 循环条件row / col<维度,因为它是一个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);
}

}

答案 1 :(得分:0)

我试图解决你的问题只是为了让你大致了解如何实现它。

可以根据您的要求进一步推广。

我的代码在java中,你可以在这里看到它:http://ideone.com/L4zu2j

为那些需要勺子喂食的人编辑-_-

UIViewController

输出

UIViewController

希望这会有所帮助。询问是否有任何疑问。