如何在C ++中找到矩阵2D中其他对角线的平行对角线反转

时间:2016-12-09 16:24:24

标签: c++ matrix reverse diagonal

我在C ++中管理二维矩阵nxn时遇到问题。我的问题是创建一个函数,控制是否存在主对角线上的任何对角线,平行线,与其他对角线相反。我控制了行和列所必需的两个索引,如果不同,也许我可以帮助我使用支持数组来反转元素。也许用一个巨大的矩阵(例如8x8,14阵列)不是一个好主意所以,我问你的帮助。

由于

an example with matrix 4x4

这是我的代码:

bool funct(short **M, int rows, int columns){
bool found = false;

for(int i = 0; i < rows; i++){
    for(int j = 0; j < colums; j++){

        if(i != j){
            //control the reverse array
        }
    }
  }
}

ps:我的主要问题是通用算法(nxn)。

1 个答案:

答案 0 :(得分:1)

在二次矩阵中,每个对角线恰好具有相同长度的另一个对角线(主对角线除外)。所以你只需要检查一下:

for(int diagonal = 1; diagonal < cols - 1; ++diagonal)
{
    //inspect the diagonal that starts at (0, diagonal)
    //the other diagonal starts at (diagonal, 0)
    int diagonalLength = cols - diagonal;

    //Assume that this diagonal has a reverse counterpart
    bool diagonalHasReverse = true;

    //Now check if it really has
    for(int i = 0; i < diagonalLength; ++i)
    {
        if(M[i][diagonal + i] != 
           M[diagonal + diagonalLength - 1 - i][diagonalLength - 1 - i])
        {
            diagonalHasReverse = false;
            break;
        }
    }
    //do whatever you want with diagonalHasReverse
}

外环不处理最后一个(单元素)对角线。如果要包含它,则必须按如下方式修改循环:

for(int diagonal = 1; diagonal < cols; ++diagonal)