Poj 1321 棋盘问题(搜索)
Description
Input
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
Sample Input
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1
Sample Output
2
1
分析:回溯法,这题要求的是方案数量。刚开始的时候就是用二维数组暴搜,但是就是不知道怎么判断这个解是不是重复的,因为棋子没有区别,所以4个位置放4个棋子有24种方法,但是如果棋子相同的话就是一种了。想想每次排序再存起来判断的话会超时,所以就采取了按行(以按行为例)或按列搜索的方法来解。从第一行开始搜索,如果这一行中有满足条件的位置就再搜索下一行,如果这一行没有的话就搜索下下行。再加个判断条件,如果超过N的话就结束,这样到了最后一行,有结果就加一,没有就回溯。有了按按搜索这样一个顺序,再加上判断条件,就不会出现重复的排列了。
import java.util.Scanner;
public class Main {
	static int N, M;
	static boolean[][] path;
	static boolean[] xP;
	static boolean[] yP;
	static int ans;
	static void DFS(int row, int n) {
		if (n == M) {
			ans++;
			return;
		}
		if (row > N) //配合下面DFS(row+1,num); 语句使用,避免搜索越界
			return;
		for (int j = 1; j <= N; j++) {
			if (path[row][j] && !yP[j] && !xP[row]) {
				yP[j] = true;
				xP[row] = true;
				DFS(row + 1, n + 1);
				yP[j] = false;
				xP[row] = false;
			}
		}
		DFS(row + 1, n);// 如果该行没有合适的位置,搜索下一行。
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (true) {
			N = sc.nextInt();
			M = sc.nextInt();
			if (N == -1) {
				break;
			}
			String in[] = new String[N + 1];
			path = new boolean[10][10];
			xP = new boolean[10];
			yP = new boolean[10];
			ans = 0;
			for (int i = 1; i <= N; i++) {
				in[i] = sc.next();
				for (int j = 1; j <= N; j++) {
					if (in[i].charAt(j - 1) == '#') {
						path[i][j] = true;
					}
				}
			}
			DFS(0, 0);
			System.out.println(ans);
		}
	}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Poj 1321 棋盘问题(搜索)的更多相关文章
- POJ 1321 棋盘问题 --- DFS
		
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...
 - DFS POJ 1321 棋盘问题
		
题目传送门 /* DFS:因为一行或一列都只放一个,可以枚举从哪一行开始放,DFS放棋子,同一列只能有一个 */ #include <cstdio> #include <algori ...
 - POJ 1321 棋盘问题(C)回溯
		
Emmm,我又来 POJ 了,这题感觉比上次做的简单点.类似皇后问题.但是稍微做了一点变形,比如棋子数量是不定的.棋盘形状不在是方形等等. 题目链接:POJ 1321 棋盘问题 解题思路 基本思路:从 ...
 - POJ 1321 棋盘问题(DFS板子题,简单搜索练习)
		
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44012 Accepted: 21375 Descriptio ...
 - POJ 1321 棋盘问题(搜索的方式)
		
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
 - POJ - 1321 棋盘问题 dfs分层搜索(n皇后变式)
		
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47960 Accepted: 23210 Descriptio ...
 - POJ 1321 棋盘问题 DFS搜索
		
简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...
 - poj  1321  棋盘问题 (DFS深度优先搜索)
		
Problem Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋 ...
 - POJ - 1321 棋盘问题(简单搜索)
		
题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方 ...
 
随机推荐
- 主攻ASP.NET MVC4.0之重生:上下滑动屏幕动态加载数据
			
@{ ViewBag.Title = "Index"; } <!DOCTYPE html> <html> <head> ...
 - 主攻ASP.NET.4.5 MVC4.0之重生:图书推荐
			
前段时间看完ASP.Net4.0 框架揭秘 ,目前现在此书在家睡大觉,看得云里雾里,实战有些东西用不上,感觉好可惜. 大概看了一下这本书,这本书很多功能,可以在实际项目中能用上的方法和技巧.小小推荐, ...
 - linux之下载工具wget
			
常用格式:wget options URL -b, --background 启动后转入后台执行 -c, --continue 接着下载没下载完的文件 - ...
 - hadoop实战项目:查找相同字母组成的字谜
			
前面我们学习了MapReduce编程思想和编程示例,那么本节课程同学们一起操练操练,动手完成下面的项目. 项目需求 一本英文书籍包含成千上万个单词或者短语,现在我们需要在大量的单词中,找出相同字母组成 ...
 - 深入理解JVM2
			
1 JVM简介 VM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. ...
 - H3C  交换机设置telnet WEB用户
			
huwei : local-user admin password cipher @#$@#$ service-type telnet ssh service-type telnet ssh leve ...
 - 转:gdb相关学习
			
声明本文转自:http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html (查看内存部分有补充) 另推荐一个入门级的好文章:htt ...
 - vs2010下创建webservice  ----第一天(建立项目,以及不连数据库进行加减乘除)
			
Visual Studio 2010默认采用的框架为.NET Framework4,在这个框架中已找不到直接创建WebService的模板方式了.但VS2010可以创建WebService是毋庸置疑的 ...
 - QT 文本html显示格式的问题,如在QTextBrowser.setText用tr(),其中为html格式
			
QObject::tr("<h1><font color = green>%1</font>的人品指数:<font color = orange&g ...
 - Python之单例模式总结
			
一.单例模式 a.单例模式分为四种:文件,类,基于__new__方法实现单例模式,基于metaclass方式实现 b.类实现如下: class Sigletion(objects): import t ...