Matrix 对角填充条目的算法

Matrix 对角填充条目的算法,matrix,Matrix,假设我有一个矩阵a为n*n,并希望对角填充条目。 首先,我想填充主对角线,然后是主对角线上方的对角线,等等。 然后在主对角线下方画对角线 首先我想填充红色的主对角线,然后是绿色的主对角线,然后是紫色主对角线下方的对角线 然后主要概念是在主对角线被填充之后,我想填充它上面的对角线,然后在它下面,然后在它上面,在它下面,直到矩阵被填充 假设我有个条目1-64,我想对角填充。我试图解决您的问题,只是想让您大致了解如何实现它 它可以根据您的要求进一步推广 我的代码是用java编写的,您可以在这里看到:

假设我有一个矩阵
a
n*n
,并希望对角填充条目。 首先,我想填充主对角线,然后是主对角线上方的对角线,等等。 然后在主对角线下方画对角线

首先我想填充红色的主对角线,然后是绿色的主对角线,然后是紫色主对角线下方的对角线

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


假设我有个条目
1-64
,我想对角填充。

我试图解决您的问题,只是想让您大致了解如何实现它

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

我的代码是用java编写的,您可以在这里看到:

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

    /* 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("");
    }
}
}

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

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

一个好的战略是:

  • 像往常一样,自己检查null和IOO异常

  • 从[0,0]开始,使用循环填充第一条对角线。(a11,a22,…)
  • 循环条件行/列<维度,因为它是n*n
  • 上一个循环中还有两个循环。第一个循环应在第一个循环(a12、a23..)上方形成另一条对角线。第二个循环应该做它下面的对角线
我跑得很快。希望能有帮助

注意:上面写着//Do something。。就是你需要换手机做任何你需要的事情的地方。我假设您使用的对象会改变颜色

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.util.array;
公共类诊断填充器{
私有整数维;
公共DiagFiller(整数维度){
int[][]矩阵=新的int[dimension][dimension];
//初始化数组单元格。
对于(int row=0;row

}

你试过什么?你用什么语言?内存是如何分配的?@paddy我只是想写算法,不是用任何特定的语言那么,你试过什么?假设你有一个画一条对角线的子程序。需要呼叫多少次?它应该做什么?你能认出同一颜色的坐标之间是否有图案吗?@Amadan是的,对角线坐标之间有图案。需要调用15次,因为总共有15条对角线,其中两条对角线各有一个条目更新了广义解,希望现在能有所帮助。虽然上述对角线的循环将一次填充一条对角线?int row不应使用1初始化是的,它将按照您提到的从上/左到下/右填充每条对角线的顺序进行。我不确定您对int row不使用1初始化的意思是什么?我只是用整数来表示它是如何被填充的。我假设您将使用创建的对象初始化每个单元格。
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);
}