Показать сообщение отдельно
  #2  
Старый 13.01.2011, 03:02
Пользователь

Отправить личное сообщение для lordKelvin Посмотреть профиль Найти все сообщения от lordKelvin
 
Регистрация: 25.01.2010
Сообщений: 51

Код:
#include <stdio.h>

int *reallocate( int *buf, int size, int nsize )
{
    int *tmp = new int [ nsize ];
    memcpy( buf, tmp, size * sizeof( int ) );
    delete []buf;
    return tmp;
}

int main( int argc, char *argv[] )
{
    int mbuf = 16, ibuf = 0, a, b;
    int **buf = new int * [ mbuf ];
    while( scanf( "%d-%d", &a, &b ) == 2 )
    {
        for( int i = 0;; i++ )
        {
            if( i == a.i )
            {
                buf[ ibuf ] = new int [ 16 ];
                buf[ ibuf ][ 0 ] = 16;
                buf[ ibuf ][ 1 ] = 3;
                buf[ ibuf ][ 2 ] = a;
                buf[ ibuf ][ 3 ] = b;
                if( ++ibuf >= mbuf )
                {
                    buf = ( int ** )reallocate( ( int * )buf, mbuf, mbuf + 16 );
                    mbuf += 16;
                }
                printf( "%d-%d\r\n", a, b );
                break;
            }
            bool ain = false, bin = false;
            for( int j = 2; j < buf[ ibuf ][ buf[ ibuf ][ 1 ] ]; j++ )
            {
                ain |= a == buf[ ibuf ][ j ];
                bin |= b == buf[ ibuf ][ j ];
            }
            if( ain && bin )
                break;
            if( !ain && !bin )
                continue;
            printf( "%d-%d\r\n", a, b );
            if( ain ) buf[ ibuf ][ buf[ ibuf ][ 1 ]++ ] = b;
            if( bin ) buf[ ibuf ][ buf[ ibuf ][ 1 ]++ ] = a;
            if( buf[ ibuf ][ 1 ] >= buf[ ibuf ][ 0 ] )
            {
                buf[ ibuf ] = reallocate( buf[ ibuf ], buf[ ibuf ][ 1 ], buf[ ibuf ][ 1 ] + 16 );
                buf[ ibuf ][ 1 ] += 16;
            }
        }
    }
    delete buf;
}