poj1321棋盘问题(dfs+摆放问题)

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放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

注意:不是每一行都要摆

代码:
import java.util.Arrays;
import java.util.Scanner;

public class Main{
         static int n,k,cnt;
         static final int N=10;
         static char map[][]=new char[N][N];
         static boolean vis[]=new boolean[N];//列
         static void dfs(int r,int t){//r是行 t是第几个棋          //这种多个if条件的都要加上return,避免出错
                 if(t==k) {
                      cnt++; return;
                 }
                 if(r>=n) return;          //当前行摆放或者不摆放
                 for(int i=0;i<n;i++){
                         if(!vis[i] && map[r][i]==‘#‘){
                                 vis[i]=true;
                                 dfs(r+1,t+1);
                                 vis[i]=false;
                         }
                 }
                 dfs(r+1,t);
         }
         public static void main(String[] args) {
                 Scanner scan=new Scanner(System.in);
                 while(scan.hasNext()){
                         n=scan.nextInt();
                         k=scan.nextInt();
                         if(n==-1 && k==-1) break;
                         for(int i=0;i<n;i++) map[i]=scan.next().toCharArray();
                         Arrays.fill(vis, false);
                         cnt=0;
                         dfs(0,0);
                         System.out.println(cnt);
                 }
        }
}

原文地址:https://www.cnblogs.com/qdu-lkc/p/12238790.html

时间: 2024-11-10 09:42:08

poj1321棋盘问题(dfs+摆放问题)的相关文章

POJ1321 棋盘问题 dfs

太简单了 没啥好说的 存个档 #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; const int N=1e9; int n,k,ans; string a[9];//map bool vis[9];//column void dfs(int x,int step){//current line if(step==k){ans+

poj1321 棋盘问题(深搜dfs)

转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/problem?id=1321 -----------------------------------------------------------------------------------------------------------------------------------------------

DFS——poj1321棋盘问题

一.题目回顾 题目链接:棋盘问题 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目. n <= 8 , k <= n 当为-1 -1时表示输入结束. 随后的n行描述了棋盘的形

POJ1321 棋盘问题

棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22776   Accepted: 11298 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示

棋盘问题 dfs分层搜索(n皇后变式)

棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 47960   Accepted: 23210 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示

POJ1321——棋盘问题

http://poj.org/problem?id=1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目. n <= 8 , k <= n 当为-1 -1时表示输入结束. 随后的n行描述了棋盘的形状:每行

棋盘问题-DFS

C - 棋盘问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1321 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每

POJ 1321 棋盘问题 DFS 期末前水一水就好……

A - 棋盘问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,

POJ 1321 棋盘问题(dfs回溯)

A - 棋盘问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1321 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每