zoukankan      html  css  js  c++  java
  • POJ 1321 棋盘问题(棋盘DFS)

    棋盘问题
     

    思路:

    分层查找,逐行深搜。

    注意k < n时的处理。

     1 #include <map>
     2 #include <stack>
     3 #include <queue>
     4 #include <math.h>
     5 #include <stdio.h>
     6 #include <string.h>
     7 #include <iostream>
     8 #include <limits.h>
     9 #include <algorithm>
    10 #define LL long long
    11 #define min(a,b) (a>b?b:a)
    12 #define max(a,b) (a>b?a:b)
    13 #define eps 1e-9
    14 #define INF 1 << 30
    15 using namespace std;
    16 
    17 int Ans;
    18 int n, m;
    19 char Map[10][10];
    20 int vis[10];
    21 
    22 void DFS(int x, int num)
    23 {
    24     if(num == n)
    25     {
    26         Ans++;
    27         return ;
    28     }
    29     if(x > n)
    30     return ;
    31     for(int i = 0; i < m; i++)
    32     {
    33         if(Map[x][i] == '#' && !vis[i])
    34         {
    35             vis[i] = 1;
    36             DFS(x+1, num+1);
    37             vis[i] = 0;
    38         }
    39     }
    40     DFS(x+1, num);    //这里是难点,当k<n时,x在等于n之前就可能已经把全部棋子放好  
    41                       //又由于当全部棋子都放好后的某个棋盘状态已经在前面循环时记录了  
    42                       //因此为了处理多余行,令当前位置先不放棋子,搜索在下一行放棋子的情况 
    43     return ;
    44 }
    45 
    46 void run()
    47 {
    48     while(~scanf("%d%d%*c", &m, &n))
    49     {
    50         if(m == -1 && n == -1)
    51             break;
    52         memset(Map, 0, sizeof(Map));
    53         memset(vis, 0, sizeof(vis));
    54         for(int i = 0; i < m; i++)
    55         {
    56             for(int j = 0; j < m; j++)
    57                 scanf("%c", &Map[i][j]);
    58             getchar();
    59         }
    60         Ans = 0;
    61         DFS(0, 0);
    62         printf("%d
    ", Ans);
    63     }
    64 }
    65 
    66 int main(void)
    67 {
    68     run();
    69 
    70     return 0;
    71 }
    棋盘问题
  • 相关阅读:
    基于selenium的web自动化框架
    spring boot整合Mybatis
    Spring boot进阶-配置Controller、interceptor...
    spring boot 第一个Demo
    Spring事务管理
    mybatis、Spring整合(eclipse)以及事务管理
    highcharts 根据表格转化为不同的图表
    highChartTable 切换
    highcharts 切换
    九度 1533 最长上升子序列
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3473263.html
Copyright © 2011-2022 走看看