В данном конкретном случае можно "развернуть" матрицу в одномерный массив и обойтись одним циклом. Вот, набросал на скорую руку.
#define MAX_SAME 2
...
void search_matrix( int* matr, const int limit )
{
int same_count = 0;
int i = 0;
int j = i + 1;
while ( same_count < MAX_SAME && i < limit*limit - 1 ) {
if ( matr[ i ] == matr[ j ] ) {
same_count++;
}
if ( same_count < MAX_SAME ) {
j++;
if ( j == limit*limit ) {
i++;
same_count = 0;
j = i + 1;
}
}
}
if ( same_count == MAX_SAME ) {
cout << same_count << ' ' << i << ' ' << j;
}
}
Да, придётся ещё индексы "вернуть" к двумерным.
P.S. Я в C++ не силён, если что - сильно не пинайте :)
P.P.S. Тут, конечно, 2 цикла. Прошу прощения, был взволнован :)