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..)上方形成另一条对角线。第二个循环应该做它下面的对角线
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);
}