poj1321 棋盘问题 dfs

题目链接:http://poj.org/problem?id=1321

poj少有的中文题目,很嗨皮

直接上代码:

 1 ///2014.3.30
 2 ///poj1321
 3 
 4 #include <iostream>
 5 #include <cstdio>
 6 using namespace std;
 7 
 8 int N,K;
 9 bool board[10][10];
10 bool used[10];
11 int C;
12 
13 void init(){
14     char temp;
15     for(int i=1 ; i<=N ; i++){
16         used[i] = false;
17         for(int j=1 ; j<=N ; j++){
18             cin>>temp;
19             if( temp=='#' )
20                 board[i][j] = true;
21             else
22                 board[i][j] = false;
23         }
24     }
25     C = 0;
26 }
27 
28 void dfs(int r,int num){
29     if( num==K ){
30         C++;
31         return;
32     }
33     if( r>N )
34         return;
35     for(int i=1 ; i<=N ; i++){
36         if( board[r][i] && !used[i] ){
37             used[i] = true;
38             dfs(r+1,num+1);
39             used[i] = false;
40         }
41     }
42     dfs(r+1,num);
43 }
44 
45 int main()
46 {
47     // freopen("in","r",stdin);
48     // freopen("out","w",stdout);
49 
50     while( cin>>N>>K && N!=-1 && K!=-1 ){
51         init();
52         dfs(1,0);
53         cout<<C<<endl;
54     }
55     return 0;
56 }

 

posted @ 2014-03-30 22:24  basement_boy  阅读(113)  评论(0编辑  收藏  举报