#include <iostream>
#include <iomanip>
using namespace std;
enum Symmetry
{
MDiag = 0x01 ,
SDiag = 0x02 ,
Horz = 0x04 ,
Vert = 0x08 ,
Centr = 0x10
} ;
int SymMatrix( int ** R, int N)
{
int sym = 0x1F ;
for ( int r = 0 ; r < N; ++ r)
{
for ( int c = 0 ; c < N; ++ c)
{
if ( ( sym & MDiag) && ( R[ r] [ c] ! = R[ c] [ r] ) ) sym & = ~MDiag;
if ( ( sym & SDiag) && ( R[ r] [ c] ! = R[ N- 1 - c] [ N- 1 - r] ) ) sym & = ~SDiag;
if ( ( sym & Horz ) && ( R[ r] [ c] ! = R[ r] [ N- 1 - c] ) ) sym & = ~Horz;
if ( ( sym & Vert ) && ( R[ r] [ c] ! = R[ N- 1 - r] [ c] ) ) sym & = ~Vert;
if ( ( sym & Centr) && ( R[ r] [ c] ! = R[ N- 1 - r] [ N- 1 - c] ) ) sym & = ~Centr;
}
}
return sym;
}
void tell( int sym)
{
if ( sym == 0 ) cout << "Матрица несимметрична\n " ;
else
{
cout << "Матрица симметрична:\n " ;
if ( sym & MDiag) cout << " относительно главной диагонали\n " ;
if ( sym & SDiag) cout << " относительно побочной диагонали\n " ;
if ( sym & Horz) cout << " относительно горизонтали\n " ;
if ( sym & Vert) cout << " относительно вертикали\n " ;
if ( sym & Centr) cout << " центральносимметрична\n " ;
}
}
int main( int argc, char * argv[ ] )
{
int ** R = new int * [ 3 ] ;
for ( int i = 0 ; i < 3 ; ++ i) R[ i] = new int [ 3 ] ;
R[ 0 ] [ 0 ] = 1 ; R[ 0 ] [ 1 ] = 2 ; R[ 0 ] [ 2 ] = 3 ;
R[ 1 ] [ 0 ] = 1 ; R[ 1 ] [ 1 ] = 1 ; R[ 1 ] [ 2 ] = 1 ;
R[ 2 ] [ 0 ] = 3 ; R[ 2 ] [ 1 ] = 2 ; R[ 2 ] [ 2 ] = 1 ;
tell( SymMatrix( R,3 ) ) ;
R[ 0 ] [ 0 ] = 1 ; R[ 0 ] [ 1 ] = 1 ; R[ 0 ] [ 2 ] = 1 ;
R[ 1 ] [ 0 ] = 1 ; R[ 1 ] [ 1 ] = 1 ; R[ 1 ] [ 2 ] = 1 ;
R[ 2 ] [ 0 ] = 1 ; R[ 2 ] [ 1 ] = 1 ; R[ 2 ] [ 2 ] = 1 ;
tell( SymMatrix( R,3 ) ) ;
R[ 0 ] [ 0 ] = 1 ; R[ 0 ] [ 1 ] = 3 ; R[ 0 ] [ 2 ] = 1 ;
R[ 1 ] [ 0 ] = 1 ; R[ 1 ] [ 1 ] = 7 ; R[ 1 ] [ 2 ] = 1 ;
R[ 2 ] [ 0 ] = 1 ; R[ 2 ] [ 1 ] = 4 ; R[ 2 ] [ 2 ] = 1 ;
tell( SymMatrix( R,3 ) ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgplbnVtIFN5bW1ldHJ5CnsKICAgIE1EaWFnID0gMHgwMSwKICAgIFNEaWFnID0gMHgwMiwKICAgIEhvcnogID0gMHgwNCwKICAgIFZlcnQgID0gMHgwOCwKICAgIENlbnRyID0gMHgxMAp9OwoKaW50IFN5bU1hdHJpeChpbnQqKlIsIGludCBOKQp7CiAgICBpbnQgc3ltID0gMHgxRjsKICAgIGZvcihpbnQgciA9IDA7IHIgPCBOOyArK3IpCiAgICB7CiAgICAgICAgZm9yKGludCBjID0gMDsgYyA8IE47ICsrYykKICAgICAgICB7CiAgICAgICAgICAgIGlmICgoc3ltICYgTURpYWcpICYmIChSW3JdW2NdICE9IFJbY11bcl0pKSAgICAgICAgIHN5bSAmPSB+TURpYWc7CiAgICAgICAgICAgIGlmICgoc3ltICYgU0RpYWcpICYmIChSW3JdW2NdICE9IFJbTi0xLWNdW04tMS1yXSkpIHN5bSAmPSB+U0RpYWc7CiAgICAgICAgICAgIGlmICgoc3ltICYgSG9yeiApICYmIChSW3JdW2NdICE9IFJbcl1bTi0xLWNdKSkgICAgIHN5bSAmPSB+SG9yejsKICAgICAgICAgICAgaWYgKChzeW0gJiBWZXJ0ICkgJiYgKFJbcl1bY10gIT0gUltOLTEtcl1bY10pKSAgICAgc3ltICY9IH5WZXJ0OwogICAgICAgICAgICBpZiAoKHN5bSAmIENlbnRyKSAmJiAoUltyXVtjXSAhPSBSW04tMS1yXVtOLTEtY10pKSBzeW0gJj0gfkNlbnRyOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBzeW07Cn0KCnZvaWQgdGVsbChpbnQgc3ltKQp7CiAgICBpZiAoc3ltID09IDApIGNvdXQgPDwgItCc0LDRgtGA0LjRhtCwINC90LXRgdC40LzQvNC10YLRgNC40YfQvdCwXG4iOwogICAgZWxzZQogICAgewogICAgICAgIGNvdXQgPDwgItCc0LDRgtGA0LjRhtCwINGB0LjQvNC80LXRgtGA0LjRh9C90LA6XG4iOwogICAgICAgIGlmIChzeW0gJiBNRGlhZykgY291dCA8PCAiICAgINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQs9C70LDQstC90L7QuSDQtNC40LDQs9C+0L3QsNC70LhcbiI7CiAgICAgICAgaWYgKHN5bSAmIFNEaWFnKSBjb3V0IDw8ICIgICAg0L7RgtC90L7RgdC40YLQtdC70YzQvdC+INC/0L7QsdC+0YfQvdC+0Lkg0LTQuNCw0LPQvtC90LDQu9C4XG4iOwogICAgICAgIGlmIChzeW0gJiBIb3J6KSAgY291dCA8PCAiICAgINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4XG4iOwogICAgICAgIGlmIChzeW0gJiBWZXJ0KSAgY291dCA8PCAiICAgINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQstC10YDRgtC40LrQsNC70LhcbiI7CiAgICAgICAgaWYgKHN5bSAmIENlbnRyKSBjb3V0IDw8ICIgICAg0YbQtdC90YLRgNCw0LvRjNC90L7RgdC40LzQvNC10YLRgNC40YfQvdCwXG4iOwogICAgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKewogICAgaW50ICoqIFIgPSBuZXcgaW50KlszXTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyArK2kpIFJbaV0gPSBuZXcgaW50WzNdOwoKICAgIFJbMF1bMF0gPSAxOyAgUlswXVsxXSA9IDI7ICBSWzBdWzJdID0gMzsKICAgIFJbMV1bMF0gPSAxOyAgUlsxXVsxXSA9IDE7ICBSWzFdWzJdID0gMTsKICAgIFJbMl1bMF0gPSAzOyAgUlsyXVsxXSA9IDI7ICBSWzJdWzJdID0gMTsKCiAgICB0ZWxsKFN5bU1hdHJpeChSLDMpKTsKCiAgICBSWzBdWzBdID0gMTsgIFJbMF1bMV0gPSAxOyAgUlswXVsyXSA9IDE7CiAgICBSWzFdWzBdID0gMTsgIFJbMV1bMV0gPSAxOyAgUlsxXVsyXSA9IDE7CiAgICBSWzJdWzBdID0gMTsgIFJbMl1bMV0gPSAxOyAgUlsyXVsyXSA9IDE7CgogICAgdGVsbChTeW1NYXRyaXgoUiwzKSk7CgogICAgUlswXVswXSA9IDE7ICBSWzBdWzFdID0gMzsgIFJbMF1bMl0gPSAxOwogICAgUlsxXVswXSA9IDE7ICBSWzFdWzFdID0gNzsgIFJbMV1bMl0gPSAxOwogICAgUlsyXVswXSA9IDE7ICBSWzJdWzFdID0gNDsgIFJbMl1bMl0gPSAxOwoKICAgIHRlbGwoU3ltTWF0cml4KFIsMykpOwp9Cg==