[POJ 1321] 棋盘问题(DFS)

Posted youpeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 }

 






以上是关于[POJ 1321] 棋盘问题(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1321 棋盘问题(简单DFS)

[POJ 1321] 棋盘问题(DFS)

POJ 1321 棋盘问题 DFS搜索

POJ 1321 棋盘问题DFS/回溯

DFS——poj1321棋盘问题

POJ1321 棋盘问题 dfs