http://162.105.81.212/JudgeOnline/problem?id=1321 递归程序我总是写得不够如意..囧囧 这题很像n皇后问题, #include<iostream> using namespace std; bool row[9],col[9]; char map[9][9]; int ans,sum,n,k; inline bool check(int r,int i) { if(row[r] && col[i] && map[r][i]=='#') return 1; else return 0; } void dfs(int r) { if(sum==k) { ans++; return; } if(r>=n+1) return; for(int i=1;i<=n;i++) { if(check(r,i)) { row[r]=0; col[i]=0; sum++; dfs(r+1); sum--; row[r]=1; col[i]=1; } } dfs(r+1); } int main() { while(scanf("%d%d",&n,&k) && n!=-1) { sum=ans=0; memset(row,1,sizeof(row)); memset(col,1,sizeof(col)); for(int i=1;i<=n;i++) scanf("%s",map[i]+1); dfs(1); printf("%d/n",ans); } return 0; }