【POJ】1321棋盘问题
题目链接:http://poj.org/problem?id=1321
题意:见题干,很清楚了。
题解:简单dfs,参照八皇后
代码:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 #define Max 1010 5 6 int cnt = 0; 7 int n,k; 8 9 char map[Max][Max]; 10 int vis[Max]; 11 12 13 void dfs(int row,int num){ 14 if(row >= n && num != 0) 15 return; 16 if(num > n - row) 17 return ; 18 if (num == 0 ){ 19 cnt++; 20 return; 21 } 22 for(int i = 0 ; i < n ; i++){ 23 if(map[row][i] == '.') 24 continue; 25 if(vis[i]) 26 continue; 27 vis[i] = 1; 28 dfs(row+1,num-1); 29 vis[i] = 0; 30 } 31 dfs(row+1,num); 32 } 33 int main(){ 34 35 while(cin>>n>>k){ 36 if(n == -1 && k == -1) 37 break; 38 for(int i = 0 ; i < n ; i++){ 39 for(int j = 0; j < n ; j++){ 40 cin>>map[i][j]; 41 } 42 } 43 memset(vis,0,sizeof(vis)); 44 dfs(0,k); 45 cout<<cnt<<endl; 46 cnt = 0; 47 } 48 49 50 return 0; 51 }