• [POJ 1321] 棋盘问题


    题目链接:http://poj.org/problem?id=1321

    注意代码中的注释。

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 int n,k,total,ans;
     6 bool vis[10];
     7 char maze[10][10];
     8 
     9 void DFS(int cur)
    10 {
    11     /*
    12      * 先判断是不是达到了总数,在判断是不是越界
    13      * 因为是不是达到总数是上一个状态的情况,是否越界试下一个状态的情况
    14      */
    15     if(total == k)
    16     {
    17         ans++;
    18         return ;
    19     }
    20     if(cur>=n)
    21         return ;
    22     for(int j=0;j<n;j++)
    23     {
    24         if(maze[cur][j] == '#' && !vis[j])
    25         {
    26             vis[j] = 1;
    27             total++;
    28             DFS(cur+1);  //勿写成DFS(++cur): 如果下一行不行,那么你现在的状态仍然是下一行的状态,而不是刚才的状态。
    29             vis[j] = 0;
    30             total--;
    31         }
    32     }
    33     DFS(cur+1); //就算上面的所有列都不合适,你也得跳到下一行去。
    34 }
    35 int main()
    36 {
    37     while(~scanf("%d%d",&n,&k)&&(n!=-1&&k!=-1))
    38     {
    39         for(int i=0;i<n;i++)
    40             scanf("%s",maze[i]);
    41         memset(vis,0,sizeof(vis));
    42         total = ans = 0;
    43         DFS(0);
    44         printf("%d
    ",ans);
    45     }
    46     return 0;
    47 }

  • 相关阅读:
    ios开发-单例抽取宏
    ios开发- NSOperation高级功能
    ios开发-NSOperation介绍
    ios开发,多线程简介
    ios 图片水印 (代码)
    ios 截屏(代码)
    ios 图片剪裁(代码)
    第06组 每周小结 (3/3)
    第06组 每周小结 (2/3)
    第06组 每周小结 (1/3)
  • 原文地址:https://www.cnblogs.com/youpeng/p/10277484.html
Copyright © 2020-2023  润新知