• [POJ 1321] 棋盘问题(DFS)


    棋盘问题

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 73545   Accepted: 34682

    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
    

    Java AC 代码:
     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5     static char [][]maze = new char [10][10];
     6     static int []vis = new int [10];
     7     static int n,m,cnt;
     8     public static void main(String[] args) {
     9         Scanner cin = new Scanner(System.in);
    10         while(cin.hasNext()) {
    11             Arrays.fill(vis,0);
    12             n = cin.nextInt();
    13             m = cin.nextInt();
    14             if(m == -1 && n == -1)
    15                 break;
    16             cnt = 0;
    17             for(int i = 1;i <= n;i++) {
    18                 String s = cin.next();
    19                 for(int j = 1;j <= n;j++) {
    20                     maze[i][j] = s.charAt(j - 1);
    21                 }
    22             }
    23             DFS(1,0);
    24             System.out.println(cnt);
    25         }
    26     }
    27 
    28     private static void DFS(int row,int step) {
    29         if(row > n + 1)
    30             return ;
    31         if(step == m) {
    32             cnt++;
    33             return ;
    34         }
    35         for(int i = 1;i <= n;i++) {
    36             if(maze[row][i] == '#' && vis[i] == 0)
    37             {
    38                 vis[i] = 1;
    39                 DFS(row + 1,step + 1);
    40                 vis[i] = 0;
    41             }
    42         }
    43         DFS(row + 1,step);
    44     }
    45 }
  • 相关阅读:
    [转]CR, LF, CR/LF区别与关系
    [转]Maven与nexus关系
    [转]Ubuntu默认使用root用户登录并免去输入密码
    [转]PL/SQL Developer 导入导出csv文件
    [转]关于胖客户端和瘦客户端的理解
    解决win7 安装完jdk7后,再安装jdk8出现的问题 has value '1.8', but '1.7' is required.
    [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
    简单的多对一传输ns2仿真
    论文阅读笔记 (2007-06-09)
    一个简单的ns2实验全过程
  • 原文地址:https://www.cnblogs.com/youpeng/p/10306310.html
Copyright © 2020-2023  润新知