首页 > 解决方案 > 遍历矩阵中的不同对角线并在 C 中建立它的起点和终点?

问题描述

我正在尝试创建一个函数,该函数在类似国际象棋的游戏中迭代对角线,并在任何位置不为空时返回一个值。下面的代码用于水平移动。我只是不知道如何将其翻译为对角线运动。

我想 [r] 和 [c] 的增量必须同时发生,以便它沿对角线移动。我怎样才能做到这一点?

int checkHorizontal(int fromr, int fromc, int toc){
    if (fromc < toc){
        for(int c = fromc + 1; c < toc; c++){
            if ((tablero[fromr][c]) != &empty){
                return 0;
            }
        }
    }
    else if (fromc > toc){
        for(int c = toc + 1; c < fromc; c++){
            if ((tablero[fromr][c]) != &empty){
                return 0;
            }
        }
    }
    return 1;
}

如果其中一个空格不为空,我希望函数返回 0,如果所有空格都为空,则返回 1。

标签: cfor-loopmatrixdiagonal

解决方案


左对角线可以索引如下:

Matrix[i][i]

其中i0开始到((matrix size)-1)并且每个循环递增 1

右对角线可以索引如下:

Matrix[j][i]

其中i0开始,每次循环递增 1,j(matrix-1)开始,每次循环递减 1。


注意:此索引仅适用于方阵


推荐阅读