1 #include<iostream> 2 #define MAXN 10 3 using namespace std; 4 5 char _m[MAXN][MAXN]; 6 bool mark[MAXN]; 7 int n; 8 void DFS(int row); 9 int k; 10 int ans; 11 int give_num(); 12 int main() 13 { 14 //freopen("acm.acm","r",stdin); 15 int i; 16 int j; 17 18 while(cin>>n>>k) 19 { 20 ans = 0; 21 // memset(mark,false,sizeof(mark)); 22 for(i = 0; i < MAXN; ++ i) 23 { 24 mark[i] = false; 25 } 26 if(n == -1 && k == -1) 27 { 28 break; 29 } 30 for(i = 0; i < n; ++ i) 31 { 32 for(j = 0; j < n; ++ j) 33 { 34 cin>>_m[i][j]; 35 } 36 } 37 if(k == 1) 38 { 39 cout<<give_num()<<endl; 40 continue; 41 } 42 for(i = 0; i < n; ++ i) 43 { 44 if(n-i < k) 45 { 46 break; 47 } 48 for(j = 0; j < n; ++ j) 49 { 50 if(_m[i][j] == '#') 51 { 52 mark[j] = true; 53 -- k; 54 DFS(i+1); 55 ++ k; 56 mark[j] = false; 57 } 58 } 59 } 60 // cout<<k<<" - "<<endl; 61 cout<<ans<<endl; 62 } 63 } 64 65 int give_num() 66 { 67 int i; 68 int j; 69 int sum = 0; 70 for(i = 0; i < n; ++ i) 71 { 72 for(j = 0; j < n; ++ j) 73 { 74 if(_m[i][j] == '#') 75 { 76 ++ sum; 77 } 78 } 79 } 80 return sum; 81 } 82 83 void DFS(int row) 84 { 85 int i; 86 if(n - row < k) 87 { 88 return; 89 } 90 for(i = 0; i < n; ++ i) 91 { 92 if(_m[row][i] == '#' && !mark[i]) 93 { 94 if(k - 1 == 0) 95 { 96 ++ ans; 97 // DFS(row+1); 98 continue; 99 } 100 -- k; 101 mark[i] = true; 102 DFS(row+1); 103 mark[i] = false; 104 ++ k; 105 // DFS(row+1); 106 } 107 } 108 // if(k - 1 == 0) 109 { 110 DFS(row+1); 111 } 112 }
关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。
技术网站地址: vmfor.com