• POJ 1321 棋盘问题(非常经典的dfs,入门题)


    棋盘问题
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 66277   Accepted: 31639

    Description

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。

    Input

    输入含有多组测试数据。
    每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
    当为-1 -1时表示输入结束。
    随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。

    Output

    对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

    Sample Input

    2 1
    #.
    .#
    4 4
    ...#
    ..#.
    .#..
    #...
    -1 -1
    

    Sample Output

    2
    1
    

    Source

    #include<cstdio>
    #include<string>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<cstring>
    #include<set>
    #include<queue>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<cctype>
    #include<stack>
    #include<sstream>
    #include<list>
    #include<assert.h>
    #include<bitset>
    #include<numeric>
    #define max_v 10
    char G[max_v][max_v];
    int M[max_v];
    int c,n,k;
    void init()
    {
        c=0;
        memset(M,0,sizeof(M));
    }
    void dfs(int row,int num)
    {
       if(num==k)
       {
           c++;
           return ;
       }
       for(int i=row+1;i<=n;i++)
       {
           for(int j=1;j<=n;j++)
           {
               if(G[i][j]=='#'&&M[j]==0)
               {
                   M[j]=1;
    
                   dfs(i,num+1);
    
                   M[j]=0;
               }
           }
       }
    }
    int main()
    {
        while(~scanf("%d %d",&n,&k))
        {
            if(n<0&&k<0)
                break;
    
            for(int i=1;i<=n;i++)
                scanf("%s",G[i]+1);
    
            init();
    
            dfs(0,0);
    
            printf("%d
    ",c);
        }
        return 0;
    }

     

  • 相关阅读:
    LruCache 原理
    线程间通信, 进程间通信
    安卓 权限 规则
    android 捕获所有异常 未捕获的异常
    serializable parcelable
    android intent 传递 二进制数据
    apk安装 卸载 原理
    ARGB 8888 内存大小
    dalvik 基于 jvm 的改进
    查看 MySQL 数据库中每个表占用的空间大小
  • 原文地址:https://www.cnblogs.com/yinbiao/p/9501546.html
Copyright © 2020-2023  润新知