• poj 1321 棋盘问题(n行中放任意k行)


    n*n的棋盘摆K的棋子,任意两个棋子不能在同一行同一列

    Sample Input

    2 1
    #.  //# 可放
    .#
    4 4
    ...#
    ..#.
    .#..
    #...
    -1 -1
    Sample Output

    2
    1

     1 # include <cstdio>
     2 # include <cstring>
     3 # include <iostream>
     4 using namespace std ;
     5 
     6 int map[10][10] ;
     7 int x[10] ;
     8 int sum ;
     9 int n , k ;
    10 
    11 void DFS(int src , int num) //逐行搜索,src为当前搜索行,num为已填充的棋子数  
    12 {
    13     int i , j ;
    14     if (num == k)
    15       {
    16         sum++ ;
    17         return ;
    18       }
    19       
    20     if (src > n)
    21        return ;
    22     for (i = 1 ; i <= n ; i++)
    23     {
    24         if (map[src][i] && !x[i])
    25         {
    26             x[i] = 1 ;
    27             DFS(src+1 , num+1) ;
    28             x[i] = 0 ;
    29         }
    30     }
    31     DFS(src+1 ,num) ; //这里是难点,当k<n时,src在等于n之前就可能已经把全部棋子放好 
    32                        //又由于当全部棋子都放好后的某个棋盘状态已经在前面循环时记录了 
    33                        //因此为了处理多余行,令当前位置先不放棋子,搜索在下一行放棋子的情况 
    34     
    35 }
    36 
    37 int main ()
    38 {
    39 
    40     while(scanf("%d %d" , &n , &k) != EOF)
    41     {
    42         if (n == -1 && k == -1)
    43         {
    44             break ;
    45         }
    46         int i , j ;
    47         char ch ;
    48         sum = 0 ;
    49         memset(x , 0 , sizeof(x)) ;
    50         memset(map , 0 , sizeof(map)) ;
    51         for (i = 1 ; i <= n ; i++)
    52            for (j = 1 ; j <= n ; j++)
    53                {
    54                       cin>>ch ;
    55                       if (ch == '#')
    56                           map[i][j] = 1 ;
    57                }
    58         
    59         DFS(1 , 0) ;
    60         printf("%d
    " , sum) ;
    61     }
    62     
    63     
    64     return 0 ;
    65 }
    View Code
  • 相关阅读:
    LCT
    Knights0.
    Beautiful Sequence
    Mole and Abandoned Mine
    防御准备
    最小生成树计数
    Miners
    朝暮(枚举基准 容斥)
    Dynamic Rankings(整体二分)
    BZOJ 3875 Ahoi2014 骑士游戏
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/4506778.html
Copyright © 2020-2023  润新知