Cod sursa(job #1851449)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 19 ianuarie 2017 19:16:46
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
# include <fstream>
using namespace std;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
int a[4][5][5]={
    {{0,0,1,0,0},
     {1,1,1,1,1},
     {0,0,1,0,0},
     {0,1,1,1,0},
     {0,0,1,0,0}},

    {{0,0,1,0,0},
     {0,1,1,1,0},
     {0,0,1,0,0},
     {1,1,1,1,1},
     {0,0,1,0,0}},

    {{0,0,0,1,0},
     {0,1,0,1,0},
     {1,1,1,1,1},
     {0,1,0,1,0},
     {0,0,0,1,0}},

    {{0,1,0,0,0},
     {0,1,0,1,0},
     {1,1,1,1,1},
     {0,1,0,1,0},
     {0,1,0,0,0}},
};
int v[12][12],sol[12][12],n,i,j,maxim;
int pune(int d,int i,int j){
    for(int ii=0;ii<5;ii++)
        for(int jj=0;jj<5;jj++)
            if(v[i+ii][j+jj]!=0&&a[d][ii][jj]!=0)
                return 0;
    return 1;
}
void adauga(int d,int i,int j,int avioane){
    for(int ii=0;ii<5;ii++)
        for(int jj=0;jj<5;jj++)
            if(a[d][ii][jj]!=0)
                v[i+ii][j+jj]=avioane;
}
void sterge(int d,int i,int j){
    for(int ii=0;ii<5;ii++)
        for(int jj=0;jj<5;jj++)
            if(a[d][ii][jj]!=0)
                v[i+ii][j+jj]=0;
}
void back(int avioane,int i,int j){
    if(i>n-4){
        if(avioane>maxim){
            maxim=avioane;
            for(int ii=1;ii<=n;ii++)
                for(int jj=1;jj<=n;jj++)
                    sol[ii][jj]=v[ii][jj];
        }
        return;
    }
    for(int d=0;d<4;d++){
        if(pune(d,i,j)){
            adauga(d,i,j,avioane+1);
            if(j>n-5)
                back(avioane+1,i+1,1);
            else
                back(avioane+1,i,j+1);
            sterge(d,i,j);
        }
    }
    if(j>n-5)
        back(avioane,i+1,1);
    else
        back(avioane,i,j+1);
}
int main () {
    fin>>n;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            fin>>v[i][j];
    back(0,1,1);
    fout<<maxim<<"\n";
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            fout<<sol[i][j]<<" ";
        fout<<"\n";
    }
    return 0;
}