POJ1321

//DFS基础
//按行搜索,因此后期只需考虑是否在同一列
//每一行都可以选择放或者不放棋子
#include 
#include 
#include 
using namespace std ;
char Map[10][10];
int visit[10] ;
int n , k ;
int sum ,cnt ;
void DFS(int x)
{
    if(sum == k)
    {
        cnt ++ ;
        return ;
    }
    if(x > n) return ;
    for(int a = 0 ; a <= n ; a ++)
    {
        if(!visit[a] && Map[x][a] == '#')
        {
            visit[a] = 1 ;
            sum ++ ;
            DFS(x+1);
            visit[a] = 0;
            sum -- ;
        }
    }
    DFS(x+1);
}
int main()
{
    while(cin >> n >> k)
    {
        if(n == -1 && k == -1) break ;
        for(int i = 1 ; i <= n ; i ++ )
        {
            for(int j = 1 ; j <= n ; j++ )
            {
                cin >> Map[i][j] ;
            }
        }
        memset(visit , 0 , sizeof(visit)) ;
        cnt = 0 ;
        sum = 0 ;
        DFS(1) ;
        cout << cnt << endl ;
    }
    return 0 ;
}

你可能感兴趣的:(搜索,POJ)