Cod sursa(job #2367881)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 5 martie 2019 12:41:33
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;
int n,a1,a2,b1,b2,i,j,mini,i_1,j_1,i_2,j_2;
char s[105];
int m[105][105],v[105][105];
void fil( int c1 , int c2 , int val )
{
    if( c1 <= 0 || c2 <= 0 || c1 > n || c2 > n )
        return;
    if( m[ c1 ][ c2 ] == -1 )
        return;
    if( v[ c1 ][ c2 ] )
        return;
    v[ c1 ][ c2 ] = val;
    fil( c1 + 1 , c2 , val );
    fil( c1 - 1 , c2 , val );
    fil( c1 , c2 + 1 , val );
    fil( c1 , c2 - 1 , val );
}
int main()
{
    cin>>n;
    cin>>a1>>a2;
    cin>>b1>>b2;
    for( i = 1 ; i <= n ; i++ )
    {
        cin.get();
        cin.get( s , 105 );
        for( j = 0 ; j < strlen( s ); j++ )
            m[ i ][ j + 1 ] = -( s[ j ] == '1' );
    }
    fil( a1 , a2 , 1 );
    if( v[ b1 ][ b2 ] == 1 )
    {
        cout<<0;
        return 0;
    }
    fil( b1 , b2 , 2 );
    mini = 1e9;
    for( i_1 = 1 ; i_1 <= n ; i_1++ )
        for( j_1 = 1 ; j_1 <= n ; j_1++ )
            for( i_2 = 1 ; i_2 <= n ; i_2++ )
                for( j_2 = 1 ; j_2 <= n ; j_2++ )
                    if( v[ i_1 ][ j_1 ] == 1 && v[ i_2 ][ j_2 ] == 2 )
                        mini = min( mini , ( i_1 - i_2 ) * ( i_1 - i_2 ) + ( j_1 - j_2 ) * ( j_1 - j_2 ) );
    cout<<mini;
}