题目链接:http://poj.org/problem?id=1321
简单的水题一个直接dfs搞定,代码如下:
#include <cstdio>
#include <cstring>
using namespace std;
int n, k;
char data[8][8];
int ans;
int visited[8];
void dfs(int cur, int count)
{
if (cur >= n)
return ;
dfs (cur + 1, count);
for (int i = 0; i < n; ++i)
{
if (data[cur][i] == '#' && !visited[i])
{
visited[i] ++;
if (count + 1 == k)
{
ans += 1;
}
else
{
dfs(cur + 1, count + 1);
}
visited[i] --;
}
}
}
int main ()
{
while (scanf ("%d%d", &n, &k))
{
if (n == -1 && k == -1)
break;
for (int i = 0; i < n; ++i)
scanf ("%s", data[i]);
ans = 0;
memset(visited, 0, sizeof (visited));
dfs(0, 0);
printf ("%d\n", ans);
}
return 0;
}