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 }