您的位置:首页 > 其它

pku1321 棋盘问题

2009-02-17 23:28 302 查看
//pku1321 棋盘问题
#include <cstdio>
#include <cstring>

#define MAX_N 8

typedef unsigned char BYTE;

BYTE place[MAX_N][MAX_N];
BYTE nPlace[MAX_N];

long N, K;
unsigned long gTotal;
BYTE gMark = 0;

void dfs(long level=0, long k=0)
{
long i, j;
for (i=level; i<=(N-K+k); i++)
{
for (j=0; j<nPlace[i]; j++)
{
if (! (gMark & place[i][j]))
{
if (k+1 == K)
gTotal++;
else
{
gMark |= place[i][j];
dfs(i+1, k+1);
gMark &= (~place[i][j]);
}
}
}
}
}

int main()
{
while (2 == scanf("%ld%ld", &N, &K))
{
if (-1==N || -1==K)
break;

memset(nPlace, 0, N*sizeof(nPlace[0]));
gTotal = 0;
gMark = 0;

long i, j;
char buffer[MAX_N+1];
for (i=0; i<N; i++)
{
scanf("%s", buffer);
BYTE val = 1;
for (j=0; j<N; j++)
{
if ('#' == buffer[j])
place[i][ nPlace[i]++ ] = val;
val = val << 1;
}
}

if (K <= N)
dfs();

printf("%ld/n", gTotal);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: