Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 1   Accepted Submission(s) : 1

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

 

Input

 

Output

For each test case, output one line containing the maximum number of blockhouses that can be placed in the city in a legal configuration.

Sample Input

4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0

Sample Output

5
1
5
2
4

Source

Zhejiang University Local Contest 2001
 
 
#include<iostream>
#include<cstdio>

using namespace std;

int map[5][5],n,ans,m;
int visited[5][5],flag;

void DFS(int s){
    if(s==n*n){
        if(ans<m)
            ans=m;
        return;
    }
    int i,j,k;
    i=s/n,j=s%n;
    if(!visited[i][j]){
        flag=0;
        if(map[i][j])
            flag=1;
        for(k=i-1;k>=0 && !flag;k--){
            if(map[k][j])
                break;
            if(visited[k][j]){
                flag=1;
                break;
            }
        }
        for(k=j-1;k>=0 && !flag;k--){
            if(map[i][k])
                break;
            if(visited[i][k]){
                flag=1;
                break;
            }
        }
        if(!flag){
            m++;
            visited[i][j]=1;
            DFS(s+1);
            m--;
            visited[i][j]=0;
            DFS(s+1);
        }else
            DFS(s+1);
    }
}

int main(){

    //freopen("input.txt","r",stdin);

    char ch;
    while(cin>>n && n){
        ans=m=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                cin>>ch;
                map[i][j]=(ch=='X');
                visited[i][j]=0;
            }
        DFS(0);
        printf("%d\n",ans);
    }
    return 0;
}

 

相关文章: