Вы делаете слишком много свопов. :)
Например, когда i
равно 0
и j
равно 1
вы меняете
input_arr[0][1] and input_arr[1][0]
Когда i
равно 1
и j
равно 0
, вы снова меняете местами
input_arr[1][0] and input_arr[0][1]
только в обратном порядке.
Могу предложить следующее решение
#include <iostream>
#include <utility>
template <typename T, size_t N>
void transpose( T ( &a )[N][N] )
{
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = i + 1; j < N; j++ )
{
std::swap( a[i][j], a[j][i] );
}
}
}
template <typename T, size_t N>
std::ostream & display( const T ( &a )[N][N],std::ostream &os = std::cout )
{
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
os << a[i][j] << ' ';
}
os << '\n';
}
return os;
}
int main()
{
const size_t N1 = 3;
int a1[N1][N1] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
display( a1 ) << '\n';
transpose( a1 );
display( a1 ) << '\n';
const size_t N2 = 4;
char a2[N2][N2] =
{
{ 'A', 'B', 'C', 'D' },
{ 'E', 'F', 'G', 'H' },
{ 'I', 'J', 'K', 'L' },
{ 'M', 'N', 'O', 'P' }
};
display( a2 ) << '\n';
transpose( a2 );
display( a2 ) << '\n';
return 0;
}
Вывод программы:
1 2 3
4 5 6
7 8 9
1 4 7
2 5 8
3 6 9
A B C D
E F G H
I J K L
M N O P
A E I M
B F J N
C G K O
D H L P