POJ 1321 Chess Problem

1445 ワード

中国語の問題はもう言わない.
解法:DFS
 
#include<iostream>
using namespace std;

bool cvis[9];               //            
bool chess[9][9];           //     
int  c,n,k; 


void DFS(int row,int num)
{
     
     if(num==k)
     {
          c++;
          return ;
               
     }
     
     if(row>n) return ;
     
     for(int i=1;i<=n;i++)
     {
           if(!cvis[i]&&chess[row][i])
           {
                 cvis[i]=1;
                 DFS(row+1,num+1);
                 cvis[i]=0;
           }                 
     }
     
     DFS(row+1,num);         //      ,      
     
     return ;

}




int main()
{
    int i,j;
    char temp;
    while(cin>>n>>k)
    {
      if( n==-1 && k==-1 ) break;
      c=0;
      memset(chess,0,sizeof(chess));
      memset(cvis,0,sizeof(cvis));
      for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                 cin>>temp;
                 if(temp=='#')
                 chess[i][j]=1;
            }
      DFS(1,0);
      cout<<c<<endl;     
    }
    return 0;
}