Pagini recente » Cod sursa (job #112656) | Cod sursa (job #39537) | Cod sursa (job #2724281) | Cod sursa (job #217438) | Cod sursa (job #2404546)
/*
The idea is that you can build any graph from 2 basic
graphs by adding two nodes x and y with x -> y and for every node
i from the existing graph the edges i -> x and y -> i . In this way
you are making cycles with 3 edges and the restriction is respected.
The initial graphs have 3 and 6 nodes. ( for odd and even )
*/
#include <bits/stdc++.h>
using namespace std ;
ifstream in ("oras.in") ;
ofstream out ("oras.out") ;
int n , dp [ 205 ][ 205 ] ;
int main () {
int i , q , j ;
in >> n ;
if ( n == 4 ) return out << "-1" , 0 ;
if ( n & 1 ) {
dp [ 1 ][ 2 ] = 1 ;
dp [ 2 ][ 3 ] = 1 ;
dp [ 3 ][ 1 ] = 1 ;
for ( q = 3 ; q < n ; q += 2 ) {
for ( i = 1 ; i <= q ; ++ i )
dp [ q + 1 ][ i ] = 1 ,
dp [ i ][ q + 2 ] = 1 ;
dp [ q + 2 ][ q + 1 ] = 1 ;
}
for ( i = 1 ; i <= n ; ++ i , out << '\n' )
for ( j = 1 ; j <= n ; ++ j ) out << dp [ i ][ j ] ;
}
dp [ 1 ][ 2 ] = 1 ;
dp [ 2 ][ 3 ] = 1 ;
dp [ 3 ][ 1 ] = 1 ;
dp [ 4 ][ 3 ] = 1 ;
dp [ 3 ][ 5 ] = 1 ;
dp [ 5 ][ 4 ] = 1 ;
dp [ 6 ][ 4 ] = 1 ;
dp [ 5 ][ 6 ] = 1 ;
dp [ 3 ][ 6 ] = 1 ;
dp [ 6 ][ 2 ] = 1 ;
dp [ 1 ][ 6 ] = 1 ;
dp [ 1 ][ 5 ] = 1 ;
dp [ 2 ][ 5 ] = 1 ;
dp [ 4 ][ 1 ] = 1 ;
dp [ 4 ][ 2 ] = 1 ;
for ( q = 6 ; q < n ; q += 2 ) {
for ( i = 1 ; i <= q ; ++ i )
dp [ q + 1 ][ i ] = 1 ,
dp [ i ][ q + 2 ] = 1 ;
dp [ q + 2 ][ q + 1 ] = 1 ;
}
for ( i = 1 ; i <= n ; ++ i , out << '\n' )
for ( j = 1 ; j <= n ; ++ j ) out << dp [ i ][ j ] ;
}