我正在处理一个项目,需要在一个二维数组(矩阵)中查找一个特定的数字。访问矩阵元素的顺序如下(4 * 4矩阵)。现在我站在位置0上。等价地说,我想首先按对角线访问矩阵元素。
0 2 7 14
3 1 5 12
8 6 4 10
15 13 11 9
此外,如何在不使用goto语句的情况下中断两个嵌套循环。
使用另一个带有数组索引的数组(因为你的数组大小可能是固定的),例如,如果你将第一个数组存储在一维C++数组中,则
int actual_arr[16];
int indices[16] = {0, 5, 1, 4, 10, 6, 9, 2, 8, 15, 11, 14, 7, 13, 3, 12 };
那么你可以编写一个循环:
for (int i = 0; i < 16; ++i)
{
actual_arr[indices[i]]++;
}
int indices[16]
替换为 std::pair<int, int> indices[16]
即可。特别是当您有一个固定大小的数组并多次访问它时,这是一个好的解决方案,因为它不涉及循环中的任何计算。顺便说一下,从数学上讲,indices 数组将被称为排列,并且可以是置换群中的一个操作。置换群。#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;
}
}
}
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;
}