//poj1321#include <iostream>#include <string.h>using namespace std;int n, k;int total = 0;char board[10][10];bool visited[10];/*思路:DFS,一行一行的搜,找到一个解*/bool DFS(int x, int last){ if (last == 0) { return true; } if (n - x < last) { return false; }//放在这0MS for (int i = 0; i < n - x; i++) { /*if (n - x - i < last) { return false; }*///放在这个地方16MS for (int j = 0; j < n; j++) { if (board[x+i][j] == '#' && visited[j] == false) { visited[j] = true; if (DFS(x+i+1, last-1))//在这卡了一下,last一直想先减了再加,因为递归的调用, //这样会出现各种问题不是多一个就是少一个,水平还是不行,这么简单的纠结了半天。 { total++; } visited[j] = false; } } } return false;}int main(int argc, char **argv){ while (cin >> n >> k) { if (n==-1 && k==-1) { break; } total = 0; memset(visited, false, sizeof(visited)); memset(board, 0, sizeof(board)); for (int i = 0; i < n; i++) { cin >> board[i]; } DFS(0, k); cout << total << endl; } return 0;}
新闻热点
疑难解答