poj1321

来源:互联网 发布:手机直播源码教程 编辑:程序博客网 时间:2024/05/17 09:46
//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;}//放在这0MSfor (int i = 0; i < n - x; i++){/*if (n - x - i < last){return false;}*///放在这个地方16MSfor (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;}

0 0