c++ - 如何循环矩阵让对角线上的数字具有高优先级?

标签 c++ algorithm matrix

我正在做一个项目,需要在二维数组(矩阵)中找到某个数字。矩阵顺序的访问顺序是这样的(4*4 矩阵)。现在我站在0位置,等价地,我想先访问对角线上的矩阵元素。

0  2  7  14
3  1  5  12
8  6  4  10
15 13 11 9

此外,如何在不使用 goto 语句的情况下在 C++ 中打破两个嵌套循环。

最佳答案

下面的代码会遍历一个任意大小的方阵,优先在对角线上

#define SIZE 4

static int test[SIZE][SIZE] =
{
    {   0,    2,    7,    14  },
    {   3,    1,    5,    12  },
    {   8,    6,    4,    10  },
    {  15,   13,   11,     9  }
};

int main( void )
{
   int diagonal, delta;

   for ( diagonal = 0; diagonal < SIZE; diagonal++ )
   {
       cout << test[diagonal][diagonal] << endl;

       for ( delta = 1; delta <= diagonal; delta++ )
       {
           cout << test[diagonal-delta][diagonal] << endl;
           cout << test[diagonal][diagonal-delta] << endl;
       }
   }
}

这是一种不用 goto 跳出嵌套循环的方法

done = false;
for ( i = 0; i < 10; i++ )
{
    for ( j = 0; j < 10; j++ )
    {
        if ( some_condition_is_met )
        {
            done = true;
            break;
        }
    }
    if ( done )
        break;
}

关于c++ - 如何循环矩阵让对角线上的数字具有高优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26418932/

相关文章:

c++ - 我可以将 int 数组推送到 C++ vector 吗?

c++ - 为什么我的 setup.py 脚本会出现此错误?

将多条抗锯齿线连接在一起

algorithm - 我怎样才能正确地遍历这个列表

python - 如何在 Python 中添加二维数组的相邻元素而不必使用嵌套循环?

c++ - 是否可以更改此代码以避免使用 C++ lambda 表达式?

c++ - 播放视频时在 qwidget 上绘图

计算 nCr 的 Java 程序抛出算术异常 "Divide by zero"

matlab - 3D 矩阵与向量的乘法

javascript - 从 ES6 生成器创建多维数组