标签:
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
-------------------------------------------------------------------
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<stack>
int M ,N;
char str[105][105];
int dir[8][2] = {{1,1},{-1,1},{-1,-1},{1,-1}};
int k;
int a = 0;
using namespace std;
int book[15000];
int m;
void dfs(int cur)
{
if(k==m)
{
a++;
return ;
}
if(cur>=N) //边界
return ;
for(int j=0; j<N; j++)
if(book[j]==0 && str[cur][j]==‘#‘) //判断条件
{
book[j]=1; //标记
m++;
dfs(cur+1);
book[j]=0; //改回来方便下一行的判断
m--;
}
dfs(cur+1); //到下一行
}
int main()
{
int i;
while(scanf("%d%d",&N,&k),N!=-1&&k!=-1)
{
a=0;
m=0;
for(i=0; i<N; i++)
scanf("%s",str[i]);
memset(book,0,sizeof(book));
dfs(0);
printf("%d\n",a);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/biu-biu-biu-/p/5683420.html