Cod sursa(job #1947528)

Utilizator patcasrarespatcas rares danut patcasrares Data 31 martie 2017 00:27:51
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.22 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("regine2.in");
ofstream fout("regine2.out");
int n,ma,rez,t,p,m,b;
char x[10][10],d;
int y[20][20];
void ve(int nr,int sti,int stj,int nu)
{ int d,v=1,i,j;
if(nu==0)
    {
      if(nr>ma){
        ma=nr;
        rez=1;
      }
      else
        if(nr==ma)
        rez++;
return;

  }
  for(i=sti;i<=n;i++){
    for(j=stj;j<=n;j++)
    if(y[i][j]==0)
  {
      y[i][j]=1;
      nr++;
nu--;

      for(d=j+1;d<=n;d++)
        if(x[i][d]=='#')
         break;
          else{
            y[i][d]=1;nu--;}

      for(d=i+1;d<=n;d++)
        if(x[d][j]=='#')
         break;
          else{
            y[d][j]=1;nu--;}

      int e=j;
      for(d=i+1;d<=n;d++)
      {
        e++;

      if(x[d][e]=='#'||e>n)
        break;
        else{
         y[d][e]=1;nu--;}
      }
      e=j;
      for(d=i+1;d<=n;d++)
      {
        e--;

      if(x[d][e]=='#'||e<1)
        break;
        else{
         y[d][e]=1;nu--;}
      }

      ve(nr,i,j+1,nu);
      v=0;
      y[i][j]=0;
      for(d=j+1;d<=n;d++)
        if(x[i][d]=='#')
         break;
          else{
            y[i][d]=0;nu++;}

      for(d=i+1;d<=n;d++)
        if(x[d][j]=='#')
         break;
          else{
            y[d][j]=0;nu++;}

      e=j;
      for(d=i+1;d<=n;d++)
      {
        e++;

      if(x[d][e]=='#'||e>n)
        break;
        else{
         y[d][e]=0;nu++;}
      }
      e=j;
      for(d=i+1;d<=n;d++)
      {
        e--;

      if(x[d][e]=='#'||e<1)
        break;
        else{
         y[d][e]=0;nu++;}
      }

      nr--;
  }stj=1;
  }
if(v)
  {
      if(nr>ma){
        ma=nr;
        rez=1;
      }
      else
        if(nr==ma)
        rez++;


  }

}
int main()
{fin>>t;
for(int c=1;c<=t;c++){
        p=1;
    fin>>n;b=n*n;
if(m!=n)
p=0;
    for(int di=1;di<=n;di++)
      for(int dj=1;dj<=n;dj++)
      {d=x[di][dj];
        fin>>x[di][dj];
if(d!=x[di][dj])
p=0;

        if(x[di][dj]=='#'){
            y[di][dj]=1;b--;}
            else
                y[di][dj]=0;
      }
if(!p){rez=0;ma=0;
    ve(0,1,1,b);}
    fout<<ma<<' '<<rez<<'\n';
   m=n;

    }
}