出处:http://blog.csdn.net/lyy289065406/article/details/6647674
有人说,这是水题;有人说,试尽了所有测试数据还是WA。而我,却连一行代码都写不下来。所以只能是COPY了,当然也有收获。
#include<iostream>
using namespace std;
bool chess[9][9];
bool vistcol[9];
int s;
int n,k;
void DFS(int row,int num)
{
if(num==k)
{
s++;
return;
}
if(row>n)
return;
for(int j=1;j<=n;j++)
if(chess[row][j]&&!vistcol[j])
{
vistcol[j]=true;
DFS(row+1,num+1);
vistcol[j]=false;
}
DFS(row+1,num);
return ;
}
int main()
{
int i,j;
while(cin>>n>>k)
{
if(n==-1&&k==-1)
break;
memset(chess,false,sizeof(chess));
memset(vistcol,false,sizeof(vistcol));
s=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
char temp;
cin>>temp;
if(temp=='#')
chess[i][j]=true;
}
DFS(1,0);
cout<<s<<endl;
}
return 0;
}