Pagini recente » Cod sursa (job #1125503) | Cod sursa (job #1729134) | Cod sursa (job #1623200) | Cod sursa (job #887619) | Cod sursa (job #1947528)
#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;
}
}