poj 1321 棋盘问题

题目连接:http://poj.org/problem?id=1321

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=9;
char map[MAX][MAX];
bool visit[MAX];
int k,n,count_q;
void dfs(int cur,int tot_q )        //cur 是第cur行,tot_q是已经放了多少只棋子了
{
	if(tot_q==k)
	{
		count_q++;
		return ;
	}
	if(cur>=n)
		return ;
	for(int i=0;i<n;i++)      //在第cur行中选一个位置
	{
		if(!visit[i]&&map[cur][i]=='#')
		{
			visit[i]=true;
			dfs(cur+1,tot_q+1);
			visit[i]=false;              //这个地方一定要把还原为false,递归跳到了上一层后相当于没有选上第 i 列
		}
	}
	dfs(cur+1,tot_q);                //第cur行没有放棋子
}
int main()
{
	cin>>n>>k;
	while(n!=-1&&k!=-1)
	{
		count_q=0;
		int i,j;
		for(i=0;i<MAX+1;i++)
			visit[i]=false;
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				cin>>map[i][j];
			}
		}
		dfs(0,0);
		cout<<count_q<<endl;;
		cin>>n>>k;
	}
	return 0;
}


你可能感兴趣的:(poj 1321 棋盘问题)