【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 } 
原文地址:https://www.cnblogs.com/Asumi/p/9683966.html