现在的位置: 首页 > 综合 > 正文

poj 1321 棋盘问题

2018年04月29日 ⁄ 综合 ⁄ 共 477字 ⁄ 字号 评论关闭

这是简单的深搜题,但本人也是看了网上的提示才写出的。

注意棋子个数可能小于棋盘的数目,因此要对每个棋盘进行考虑。

对于在一列有了棋子,标记这一列,搜索时不在这列进行棋盘的寻找。要记得取消标记。

#include<stdio.h>
#include<string.h>
char s[9][9];
__int64 sum;
int a,b,f[9];

void dfs(int q,int w)
{
	int i,j,k;
	if(w==0)
	{sum++;return ;}
	for(i=q;i<=a;i++)
	{
		for(j=0;j<a;j++)
		{
			if(f[j]!=0)
				continue;
			if(s[i][j]=='#')
			{
				f[j]=1;
				dfs(i+1,w-1);
				f[j]=0;
			}
		}
	}
}

int main()
{
	int i;
	while(scanf("%d %d",&a,&b)&&a!=-1&&b!=-1)
	{
		memset(f,0,sizeof(f));
		sum=0;
		for(i=1;i<=a;i++)
		   scanf("%s",s[i]);
		dfs(1,b);
		printf("%I64d\n",sum);
	}
	return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.