题意:汉语的,so good。
和zoj1002差不多,递归,回溯
代码:
#include#include #include #include using namespace std;int map[10][10];int n,k;int ans;bool judge(int x,int y){ for(int i=x-1;i>=0;i--) { if(map[i][y]==2)return 0; } for(int i=y-1;i>=0;i--) { if(map[x][i]==2)return 0; } return 1;}void dfs(int u,int Sum){ if(u>n*n)return ; if(Sum==k) { ans++; return ; } int r=u/n; int c=u%n; if(map[r][c]==1&&judge(r,c)) { map[r][c]=2; dfs(u+1,Sum+1); map[r][c]=1; } dfs(u+1,Sum);}int main(){ char ch; int i,j; while(~scanf("%d%d",&n,&k)) { if(n==-1&&k==-1) break; getchar(); memset(map,0,sizeof(map)); for(i=0;i >ch; if(ch=='#')map[i][j]=1; } ans=0; dfs(0,0); printf("%d\n",ans); } return 0;}