POJ 1321 棋盘问题(求可行方案多少

题目链接

题目大意:

 一块 n * n 大小的棋盘,放 k 个棋子,不可以在同一行或者 同一列  ,问几种放置方案

解题思路:

按行搜索,后面for循环里再判断是否在同一列

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int n,k;
char a[11][11];
int vis[110];
int ans,sum;
void dfs(int u)
{
	if(sum==k)
	{
		ans++;
		return;
	}
	if(u==n)
	  return;
	for(int i=0;i<n;i++)
	{
		if(vis[i]==0&&a[u][i]=='#')
		{
			sum++;
			vis[i]=1;
			dfs(u+1);
			vis[i]=0;
			sum--;
		}
	}
	dfs(u+1);
}
int main()
{
	int i,j;
	while(cin>>n>>k)
	{
		if(n==-1&&k==-1)
		  break;
		memset(vis,0,sizeof(vis));
		for(i=0;i<n;i++)
		  for(j=0;j<n;j++)
		     cin>>a[i][j];
		ans=0;
		sum=0;
		dfs(0);
		cout<<ans<<endl;
	}
} 

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/108943959