Java 非方阵中的对角线
这应该是一个相当直截了当的问题,但我似乎不知道如何得到非方矩阵的所有对角线 <>我已经有了我所考虑的反对角线(例子在:),但是我也需要对角线。 示例阵列:Java 非方阵中的对角线,java,c#,Java,C#,这应该是一个相当直截了当的问题,但我似乎不知道如何得到非方矩阵的所有对角线 我已经有了我所考虑的反对角线(例子在:),但是我也需要对角线。 示例阵列: 1 2 3 4 5 6 7 8 9 10 11 12 电流输出: [1], [2,5], [3,6,9], [4,7,10], [8,11], [12] 预期额外产出: [4], [3,8], [2,7,12], [1,6,11], [5,10], [9] 我正在寻找更多的伪代码,以便更好地理解这一点 编辑:代码我必须得到反
1 2 3 4
5 6 7 8
9 10 11 12
电流输出:
[1], [2,5], [3,6,9], [4,7,10], [8,11], [12]
预期额外产出:
[4], [3,8], [2,7,12], [1,6,11], [5,10], [9]
我正在寻找更多的伪代码,以便更好地理解这一点
编辑:代码我必须得到反对角线(因为似乎没有人想跟随链接)
int ndiags=宽度+高度-1;
System.out.println(“--”);
对于(int diag=0;diag=行停止;行--){
//在给定的对角线行上+col=常数“diag”
//diag标记对角数
int col=诊断行;
系统输出打印项次(列+“,”+行);
放松(col,row);
}
System.out.println(“--”);
}
我尝试了以下方法,但还是得到了反对角线:
int ndiags = width + height - 1;
System.out.println("---");
for (int diag = 0; diag < ndiags; diag++) {
int row_stop = Math.max(0, diag - height + 1);
int row_start = Math.min(diag, width - 1);
for (int row = row_start; row >= row_stop; row--) {
// on a given diagonal row + col = constant "diag"
// diag labels the diagonal number
int col = diag - row;
System.out.println(col + "," + row);
relax(col, row);
}
System.out.println("---");
}
int ndiags=宽度+高度-1;
System.out.println(“--”);
对于(int diag=0;diag=行停止;行--){
//在给定的对角线行上+col=常数“diag”
//diag标记对角数
int col=诊断行;
系统输出打印项次(列+“,”+行);
放松(col,row);
}
System.out.println(“--”);
}
从左上到右下的每个对角线由j-i
值定义,其中i
是行号,j
是列号。请注意,某些标识符可以是负数
所以伪代码可能是这样的:
keys: -2 -1 0 1 2 3
-------------------------------
lists: 9 5 1 2 3 4
10 6 7 8
11 12
- 创建一个包含
键和int
值的字典Linst
- 迭代数组的每个元素
- 将当前元素追加到由字典中的
值标识的列表中j-i
keys: -2 -1 0 1 2 3
-------------------------------
lists: 9 5 1 2 3 4
10 6 7 8
11 12
列表元素从上到下都是可视化的。您可以将此代码推广到任何矩阵……现在它为上述指定的矩阵打印正确的输出 输出:
[4][3 8][2 7 12][5 10][9]
class Diagonal
{
public static void main(String[] args)
{
int r=3,c=4;
int Mat[][]={{1,2,3,4},{5, 6 ,7 ,8},{9,10,11,12}};
int x,y;
for(int i=c-1;i>0;i--)
{
y=i;x=0;
System.out.print("[");
while(y<c)
{
System.out.print(Mat[x][y]+" ");
x++;y++;
}
System.out.print("] ");
}
for(int i=1;i<r;i++)
{
x=i;y=0;
System.out.print("[");
while(x<r)
{
System.out.print(Mat[x][y]+" ");
x++;y++;
}
System.out.print("] ");
}
}
}
发布你已经拥有的东西。还有,这是Java还是C?不管是哪一个-我可以在两者之间进行翻译。不过,你在问题中说你已经有了一些东西。你能发布它并说它有什么问题吗?我在可视化这方面有困难(可能是因为我一直在看2D太久):你能举一个例子说明列表可能是什么样子吗?我真的很喜欢这个解决方案-这超出了我最初的问题,但你认为它也适用于3D阵列吗?是的,它可以应用于3D。然而,“对角线”将由3D矩阵的曲面表示。将会有三个方向。这正是我想要问的!如果您更改(int i=1;i)的
class Diagonal
{
public static void main(String[] args)
{
int r=3,c=4;
int Mat[][]={{1,2,3,4},{5, 6 ,7 ,8},{9,10,11,12}};
int x,y;
for(int i=0;i<c;i++)
{
y=i;x=0;
System.out.print("[");
while(y>=0 && x<r)
{
System.out.print(Mat[x][y]+" ");
x++;y--;
}
System.out.print("] ");
}
for(int i=1;i<r;i++)
{
x=i;y=c-1;
System.out.print("[");
while(x<r)
{
System.out.print(Mat[x][y]+" ");
x++;y--;
}
System.out.print("] ");
}
}
}