蛋疼的题,我纠结了好久,最后看了人家的代码才A过去的,俺的搜索还是如此之烂……
数据比较弱,最大才4*4,所以直接暴搜,把二维的数组变成线性一维,所以只用考虑后面的点,具体见下面的代码。
(这是百度来的代码,非原创……)
#include<stdio.h> int n,max; char map[5][5]; int canput(int a,int b) { int i; for(i=a-1;i>=0;i--) { if(map[i][b]=='O') return 0; if(map[i][b]=='X') break; } for(i=b-1;i>=0;i--) { if(map[a][i]=='O') return 0; if(map[a][i]=='X') break; } return 1; } void f(int k,int t) { int x,y; if(k==n*n) { if(t>max) { max=t;return; } } else { x=k/n; y=k%n; if(map[x][y]=='.' && canput(x,y)) { map[x][y]='O'; f(k+1,t+1); map[x][y]='.'; } f(k+1,t); } } int main() { int i,j; while(scanf("%d",&n),n) { getchar(); for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%c",&map[i][j]); getchar(); } max=-1; f(0,0); printf("%d/n",max); } return 0; }