POJ1321
看了别人代码后才想明白的。还得多加练习搜索题!
#include <iostream>
using namespace std;
char Map[9][9];
bool place_c[9];
int number_p;
int tol;
int n,k;
bool can_place(int i,int j)
{
return !place_c[j]&&Map[i][j]=='#';
}
void DFS(int i)
{
if(number_p==k)
{
tol++;
return;
}
if(i>=n)
return;
int j;
for(j=0;j<n;j++)
{
if(can_place(i,j))
{
number_p++;
place_c[j]=true;
DFS(i+1);
number_p--;
place_c[j]=false;
}
}
DFS(i+1);
}
int main()
{
int i,j;
while(cin>>n>>k,n!=-1||k!=-1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>Map[i][j];
for(i=0;i<n;i++)
place_c[i]=false;
number_p=0;
tol=0;
DFS(0);
cout<<tol<<endl;
}
return 0;
}

浙公网安备 33010602011771号