• poj 1321 dfs


    A - 棋盘问题
    Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u
    Submit
     
    Status
     
    Practice
     
    POJ 1321
    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

     用一个数组去标记当前列是否可以放置,然后一行一行的放置

     1 //
     2 //  main.cpp
     3 //
     4 //  Created by dada on 2017/3/7.
     5 //  Copyright © 2017年 dada. All rights reserved.
     6 #include<iostream>
     7 #include<stdio.h>
     8 #include<cstring>
     9 
    10 using namespace std;
    11 
    12 int n,k,ans;
    13 char tu[8][8];
    14 bool flag[8];
    15 
    16 void dfs(int x,int num)
    17 {
    18     if(num==k)
    19     {
    20         ans++;
    21         return ;
    22     }
    23     for(int i = x; i <n; i++)
    24     {
    25         for(int j = 0; j < n; j++)
    26         {
    27             if(!flag[j] && tu[i][j]=='#')
    28             {
    29                 flag[j] = true;
    30                 dfs(i+1, num+1);
    31                 flag[j]=false;
    32             }
    33         }
    34     }
    35 }
    36 int main()
    37 {
    38     while(cin>>n>>k,n!=-1||k!=-1)
    39     {
    40         for(int i = 0; i < n; i++)
    41             for(int j = 0; j < n; j++)
    42                 cin>>tu[i][j];
    43         memset(flag,0,sizeof(flag));
    44         ans=0;
    45         dfs(0,0);
    46         cout<<ans<<endl;
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    电脑开机时一直滴滴的响开不了机是为什么?
    电脑开机时一直滴滴的响开不了机是为什么?
    winform窗体应用实现淡入淡出等效果
    winform窗体应用实现淡入淡出等效果
    windows-如何生成转储(dmp)文件--工具篇
    面向对象(三)- Java类的方法
    面向对象 (二)- Java类的属性
    面向对象 (二)- Java类的属性
    面向对象 (一)- Java中的类和对象
    面向对象 (一)- Java中的类和对象
  • 原文地址:https://www.cnblogs.com/Xycdada/p/6516343.html
Copyright © 2020-2023  润新知