zoukankan      html  css  js  c++  java
  • 棋盘问题

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/K

    题意:

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

          案例:

          input

          2 1

          #.

          .#

        4 4

        ...#

          ..#.

          .#..

          #...

          -1 -1

          output

          2

          1

    思路分析:

          从第一行开始,找到#号,把这一列赋值为1,表示后面都不可摆在这一列的#号上,找到一个符合要求的#号,h++,利用DFS找到所有情况。再转到第二行,看是否满足情况。。。。。

    源代码如下:

     1 #include<iostream>
     2 #include<cstring>
     3 #define maxn 70
     4 using namespace std;
     5 int n,k,count,idx[maxn][maxn];
     6 char pic[maxn][maxn];
     7 void dfs(int x,int y,int h)              
     8 {
     9     int i,j,s;
    10     for(i=x;i<n;i++)
    11         idx[i][y]=1;
    12     if(h==k){++count;return;}          //满足条件记录
    13     for(i=1;i<n-x;i++)
    14         for(j=0;j<n;j++)
    15         {
    16           if(idx[x+i][j]==0&&pic[x+i][j]=='#')
    17           {
    18             h++;
    19             dfs(x+i,j,h);
    20             h--;                      //重新循环,清除记录
    21             for(s=x+i;s<n;s++)
    22                 idx[s][j]=0;          //清除标志
    23           }
    24         }
    25 }
    26 int main()
    27 {
    28     int i,j;
    29     cin>>n>>k;
    30     while(n!=-1)
    31     {
    32         count=0;
    33         for(i=0;i<n;i++)
    34             for(j=0;j<n;j++)
    35                 cin>>pic[i][j];
    36         for(j=0;j<n+1-k;j++)              //从第一行开始找出所有满足条件的可能的位置的首位置
    37            for(i=0;i<n;i++)
    38            {
    39                memset(idx,0,sizeof(idx));             //每次重新开始都要清零
    40                if(pic[j][i]=='#')dfs(j,i,1);
    41            }
    42         cout<<count<<endl;
    43         cin>>n>>k;
    44     }
    45     return 0;
    46 }

        

  • 相关阅读:
    Direct hosting of SMB over TCP/IP
    学习 Linux,302(混合环境): 概念
    脚本
    linux加入windows域
    Internet传输协议-TCP
    vCenter Single Sign On 5.1 best practices
    Zoning and LUN Masking
    Fiber Channel SAN Storage
    How to check WWN and Multipathing on Windows Server
    在Windows中监视IO性能
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4685966.html
Copyright © 2011-2022 走看看