POJ 1321 棋盘问题(DFS)

题目大意就是:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列。

很经典的一道深搜题,也比较简单,这个先敲出来当作模板放这里,哈哈。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,vis[10],res;
char map[10][10];
void dfs(int step,int line)
{
	if(line == n + 1|| step == k)
	{
		if(step == k)
			res++;
		return;
	}
	dfs(step,line + 1);
	for(int i = 0;i < n; i++)
	{
		if(map[line][i] == '#' && !vis[i])
		{
			vis[i] = 1;
			dfs(step + 1,line + 1);
			vis[i] = 0;
		}
	}
	return;
}
int main()
{
	while(1)
	{
		res = 0;
		scanf("%d %d",&n,&k);
		if(n == -1 && k == -1)	break;
		memset(vis,0,sizeof(vis));
		for(int i = 0;i < n; i++)
		{
			scanf("%s",map[i]);
			getchar();
		}
		dfs(0,0);
		printf("%d\n",res);
	}
}

猜你喜欢

转载自blog.csdn.net/xiao__hei__hei/article/details/84560819