找到2D矩阵

时间:2016-11-03 02:05:52

标签: java arrays

我对编程很陌生,在编写java作业时遇到了问题。

这篇文章的快速定义:

  • 位置=(行索引,列索引)
  • 我所说的对角线是在给定位置相交的对角线。
  • 对角线总是从矩阵的边缘开始。
  • 对角线1从左上角到右下角
  • 对角线2从左下角到右上角
  • '长度'对角线是对角线上的条目数

我得到了一个8x8矩阵的字符,矩阵中的一个特定位置,并试图找出三件事:

  1. 给定矩阵中的某个位置,在什么位置 从左上角到右下角的对角线 角落开始?
  2. 从左下角开始的对角线问题相同 朝右上角。
  3. 每个的长度是多少?
  4. 我找不到关于这个问题的任何内容所以我想出了我将用伪代码给出的这些解决方案:

    假设指数从0到7如下:

      0 1 2 3 ... 7
    0  
    1
    2
    3
    .
    .
    7    ...    .
    

    如果给你一个位置X(n,m),为了获得对角线1的起始位置你可以这样:

    while(n>0 && m>0){
        n--;
        m--;
    }
    diagonal1.startingPosition = (n, m);
    

    对于对角线2:

    while(n<7 && m>0){
    n++;
    m--;
    }
    diagonal2.startingPosition = (n, m);
    

    计算起始位置后,这些对角线的长度应为:

    //the (n, m) used here are the values after the specific while loops,
    //not the original (n, m). So for diagonal1, at least one of them == 0
    //and for diagonal2, either n == 7 or m == 0.
    diagonal1.length == (8 - max(n, m));
    diagonal2.length == (8 - min(n, m));
    

    我认为这种方法适用于任何方阵。

    现在,有什么公式我不知道找到所有这些信息吗? 有一个更简单的解决方案吗? 我在这里错过了一些基本的(数学?)概念吗?

    感谢您的时间

    编辑(使用的一些实际代码):

    /*
    Finding the diagonal from top left to bottom right
    NOTE: in this case, diagonalStartingRow = n, and diagonalStartingColumn = m.
    this way I do not actually change the original position (n,m), but I get the correct 
    starting position to calculate the length of the diagonal, which I use in the for loop below the while loop
    */
    while(diagonalStartingRow > 0 && diagonalStartingColumn > 0){
            diagonalStartingRow--;
            diagonalStartingColumn--;
        }
        for (int i = 0; i < 8 - Math.max(diagonalStartingRow,diagonalStartingColumn); i++) {
    //the chessBoard is the 2D char array and the diagonalString1 will hold the String of the diagonal
            diagonalString1 += chessBoard[diagonalStartingRow+i][diagonalStartingColumn+i];
        }
    

0 个答案:

没有答案