www.pudn.com > zju_1000_1010.rar > 1002_other3.CPP


//ACCEPTED	 
//by just for play 
 
#include 
 
int a[10][5][5];int sol[10];int count; 
int n[10];  int point;  int t_cou=0; 
 
int can(int poi,int p,int q){ 
	int i,j; 
	for(i=1;i<=n[poi];i++) 
		if(a[poi][p][i]==1) { 
		int t1,t2,tt; 
		if(i>q) {t1=q;t2=i;}else{ t1=i;t2=q;} 
		for(tt=t1;tt<=t2;tt++) if(a[poi][p][tt]==-1) break; 
		if(tt==t2+1) return 0;} 
	for(i=1;i<=n[poi];i++) 
		if(a[poi][i][q]==1){ 
		int t1,t2,tt; 
		if(p>i) {t1=i;t2=p;} else {t1=p;t2=i;} 
 
		for(tt=t1;tt<=t2;tt++) if(a[poi][tt][q]==-1) break; 
		if(tt==t2+1) return 0; 
	 } 
	 return 1; 
} 
 
void doing(int poi,int i,int j){ 
 
 
	int p,q; 
 
 
	for(p=1;p<=n[poi]; p++){ 
	for(q=1;q<=n[poi];q++){ 
		if(i==1&&j==1);else if(p==i&&q==j) continue; 
		if(a[poi][p][q]!=0) continue; 
 
 
		if(!can(poi,p,q)) continue; 
		a[poi][p][q]=1; 
				count++;if(count>sol[poi]) sol[poi]=count; 
		doing(poi,p,q); 
		 a[poi][p][q]=0;   count--; 
	}} 
 
} 
 
int main(){ 
  point=1; 
  cin>>n[point]; 
  while(n[point]!=0){ 
 
 
	count=0; 
	int q,p;char t_ch; 
	for(p=1;p<=n[point];p++) 
	 for(q=1;q<=n[point];q++){ 
		cin>>t_ch; 
		if(t_ch=='X') {a[point][p][q]=-1;} 
		else a[point][p][q]=0; 
   } 
   doing(point,1,1); 
	point++; 
   cin>>n[point]; 
  } 
  for(int i=1;i