Cod sursa(job #2769347)

Utilizator RamanujanNeacsu Mihnea Ramanujan Data 14 august 2021 21:09:04
Problema Oras Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>
#define MAXN 200
using namespace std;
ifstream fin("oras.in");
ofstream fout("oras.out");
int n, road[MAXN+1][MAXN+1];//matricea de adiacenta a intersectiilor - o dau cu 1 mai mare, ca functia de marcare
//alg recursiv: daca am rez problema pentru n-2, gasim o configuratie ce o rezolva pt n
void constructRoads(int n){//functia asta, practic, face toata problema
    if(n==3){//cazurile limita- iesim din recursivitate
        road[1][2]=1;
        road[2][3]=1;
        road[3][1]=1;//bag o configuratie gasita de mana, care merge pentru 3
    }
    else if(n==4){//sunt doua - coborand in perechi, nu stiu daca sa es pe 3 sau pe 4
       fout<<"-1";
    }
    else if(n==6){
        road[1][2]=road[1][6]=road[1][3]=1;
        road[2][3]=road[2][5]=1;
        road[3][4]=road[3][6]=1;
        road[4][2]=road[4][1]=1;
        road[5][1]=road[5][3]=road[5][4]=1;
        road[6][2]=road[6][4]=road[6][5]=1;
    }
    else{
        for(int i=1; i<n-1; i++){//luam oras cu oras
          road[i][n-1]=1;//fiecare oras trebuie sa fie pe un ciclu de 3 cu n si n-1
          road[n][i]=1;//asa ca-l leg de n-1 si pe n il leg la el
        }
        road[n-1][n]=1;//cu asta, leg toate ciclurile preexistente
        constructRoads(n-2);
    }
}
int main()
{
    fin>>n;
    constructRoads(n);
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++)
            fout<<road[i][j];
        fout<<"\n";
    }
    return 0;
}