-
//zoj1002 Fire Net
-
//Accepted 1002 C ++ 00:00.01 436K
-
#include <stdio.h>
-
int n;
-
int max;
-
char map[5][5];
- bool canput(int x, int y)
-
{
-
int i,j;
-
if (map[x][y]!='.') return false;
-
for (i=x+1; i<n; i++){
-
if (map[i][y]=='X') break;
-
if (map[i][y]=='O') return false;
-
}
-
for (i=x-1; i>=0; i--){
-
if (map[i][y]=='X') break;
-
if (map[i][y]=='O') return false;
-
}
-
for (j=y+1; j<n; j++){
-
if (map[x][j]=='X') break;
-
if (map[x][j]=='O') return false;
-
}
-
for (j=y-1; j>=0; j--){
-
if (map[x][j]=='X') break;
-
if (map[x][j]=='O') return false;
-
}
-
return true;
-
}
- bool finish()
-
{
-
for (int i=0; i<n; ++i)
-
for (int j=0; j<n; ++j)
-
if (canput(i,j))
-
return false;
-
return true;
-
}
- void backtrack(int num)
-
{
-
if (finish()){
-
if (num>max) max = num;
-
return ;
-
}
-
for (int i=0; i<n; ++i)
-
for (int j=0; j<n; ++j)
-
if (canput(i,j)){
-
map[i][j] = 'O';
-
backtrack(num+1);
-
map[i][j] = '.';
-
}
-
}
-
void solve()
-
{
-
getchar();
-
for (int i=0; i<n; ++i){
-
for (int j=0; j<n; ++j)
-
scanf ("%c",&map[i][j]);
-
getchar();
-
}
-
max = 0;
-
backtrack(0);
-
printf ("%d/n",max);
-
}
-
int main()
-
{
-
#ifdef ONLINE_JUDGE
-
#else
-
freopen("1002.txt","r",stdin);
-
#endif
-
while (scanf("%d",&n)!=EOF && n)
-
solve();
-
#ifdef ONLINE_JUDGE
-
#else
-
fclose(stdin);
-
#endif
-
return 0;
-
}
zoj1002 Fire Net
最新推荐文章于 2021-02-22 21:40:33 发布