Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非方阵中的对角线_Java_C# - Fatal编程技术网

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

    }
}