题目
源地址:
http://poj.org/problem?id=1321
理解
感觉还是蛮简单的一道题目,主要是因为数据特别水,最大只有8*8的棋盘,用DFS按照行来搜索。主要的问题在于如何确保同列不存在重复的棋子。
代码
#include <iostream>
using namespace std;
char pic[8][8];
int col[8];
int c;
int n, k;
void dfs(int begin, int num)
{
for (int j = 0; j < n; j++)
{
if (pic[begin][j] == '#' && col[j] == 0)
{
if (num == 1)
c++;
else
{
col[j] = 1;
for (int h = begin + 1; h < n - num + 2; h++)
dfs(h, num - 1);
col[j] = 0;
}
}
}
}
int main(int argc, char const *argv[])
{
while ((cin >> n >> k) && !(n == -1 && k == -1))
{
c = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> pic[i][j];
for (int i = 0; i < n; i++)
col[i] = 0;
for (int i = 0; i <= n - k; i++)
{
dfs(i, k);
}
cout << c << endl;
}
}
更新日志
- 2014年07月12日 已AC。