- 题目
- 样例
- 基础的dps搜索题目
#include <iostream> #include <cstdlib> #include <algorithm> #include <cmath> #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <string> typedef long long ll; using namespace std; int n, k; int sum=0;//记录可行的方案 char mmap[10][10];//保存地图 int vis[10];//表示每一列 void dfs(int x, int cnt) { if (cnt == k){ sum++; } for (int i = x; i < n; i++) { for (int j = 0; j < n; j++) { if (mmap[i][j] == '#' && vis[j] == 0) { vis[j] = 1; dfs(i + 1, cnt + 1); vis[j] = 0; } } } } int main() { while (cin >> n >> k) { if (n == -1 && k == -1) break; else{ sum = 0; memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { cin >> mmap[i][j]; } dfs(0, 0); } cout << sum << endl; } }