Как найти параллельную диагональную обратную сторону при другой диагонали в матрице 2D в Stack Overflow

У меня проблема с управлением двумерной матрицей nxn в C ++. Моя задача — создать функцию, которая контролирует, если существует какая-либо диагональная, параллельная линия на главной диагонали, которая обратна другой. Я управлял двумя индексами, необходимыми для строк и столбцов, если они разные, и, возможно, я мог бы помочь мне с массивами поддержки, которые обращают элементы. Возможно, это не очень хорошая идея с огромной матрицей (например, 8×8, 14 массивов), поэтому я прошу вашей помощи.

Спасибо

пример с матрицей 4х4

Это мой код:

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

Решение

В квадратичной матрице каждая диагональ имеет ровно одну другую диагональ одинаковой длины (кроме главной диагонали). Так что вам просто нужно проверить это:

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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector