用Java实现一些常见的问题
八皇后
public class EightQueen { private static final int ROW = 4;
private static final int COL = 4; private static int count = 0; // 八皇后的解的个数 private static boolean[][] maps = new boolean[ROW][COL]; // 初始化二维数组,模拟8*8棋盘,默认值是false表示没有皇后 // 如何去放皇后?
/**
* 放置第row行的皇后
* @param row 从第0行开始放皇后
*/
public static void putQueen(int row) { // 递归的出口
if (row == ROW) { // row=8时,已经到了第9行,那么前面的8行就是OK的
printQueen();
return;
} // 把皇后放到第row行的第j列
for (int j = 0; j < COL; j++) {
// 如果可以放,就将皇后放在该点
if (isOK(row, j)) {
maps[row][j] = true;
putQueen(row + 1); // 该行放好之后放下一行【递归去放皇后】,算法已经跳转
maps[row][j] = false; // 回溯,当放row+1行棋子不满足的时候,会回溯到第row行
}
}
} // 如果要将皇后放在(x,y)点,则需要先判断该点是否可以放
public static boolean isOK(int x, int y) { // 遍历二维数组,判断4个方向是否存在皇后
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
// 正斜边x-y定值,逆斜边x+y为定值
if (i == x || j == y || i - j == x - y || i + j == x + y) {
// 判断4个方向是否存在皇后
if (maps[i][j]) { // 如果该点放了一个皇后,则返回false
return false;
}
}
}
} return true;
} public static void printQueen() { System.out.println("第" + (++count) + "个解");
System.out.println("*******************");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (maps[i][j]) {
System.out.print("Q ");
} else {
System.out.print("* ");
}
}
System.out.println();
}
} /**
* 穷举法求4皇后
*/
private static void Queen(){ for(int i = 0;i < 4;++i)
for(int j = 0;j < 4;++j)
for(int k = 0;k < 4;++k)
for(int m = 0; m < 4;++m)
if (!conflusion(i,j,k,m)){
System.out.println("["+i+","+j+"," + k + "," + m +"]");
} } private static boolean conflusion(int i, int j, int k, int m) { return j == i || k == i || m == i || k == j || m == j || k == m
|| Math.abs(i - j) == 1 || Math.abs(i - k) == 2
|| Math.abs(i - m) == 3 || Math.abs(j - k) == 1
|| Math.abs(j - m) == 2 || Math.abs(k - m) == 1;
} public static void main(String[] args) { System.out.println("回溯法求解4皇后");
putQueen(0); // 从第0行开始放皇后
System.out.println("穷举法求解4皇后");
Queen();
}
}
用Java实现一些常见的问题的更多相关文章
- Java 中最常见的 5 个错误
在编程时,开发者经常会遭遇各式各样莫名错误.近日,Sushil Das 在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」. 原文链接:Top 5 Common M ...
- Java开发中常见的危险信号(中)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- 2、Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)
2.Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅. 1)SQLite Class.forNa ...
- Java web中常见编码乱码问题(二)
根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析: 2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...
- java项目中常见的异常及处理
Java开发中常见异常及处理方法 1.JAVA异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API ...
- Java基础-数组常见排序方式
Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...
- day11<Java开发工具&常见对象>
Java开发工具(常见开发工具介绍) Java开发工具(Eclipse中HelloWorld案例以及汉化) Java开发工具(Eclipse的视窗和视图概述) Java开发工具(Eclipse工作空间 ...
- Java避坑宝典《Java业务开发常见错误100例》上线了
写这个专栏的缘起 之前我写过一篇博客:<朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑>,引起的关注还是挺多的.后来和极客时间的编辑一拍即合决定以这个为题写一个专栏.其实所 ...
随机推荐
- 可用性的维度(5E)
可用性的维度 当我检查可用性文献时,我发现可用软件包含如用户友好.易学.可发现性.质量.有用的和阻止错误.在可用性工程中, Jakob Nielsen给出一个产品的五个属性:易学性.效率.可记忆性.容 ...
- iOS: Xcode7安装KSImageNamed插件,自动读取图片名称
官方文档: ## How do I use it? Build the KSImageNamed target in the Xcode project and the plug-in wil ...
- 使用.reg文件删除暴风影视库图标和注册信息
暴风播放器安装后会自动安装一个叫暴风影音库的软件,在你的电脑资源管理器中增加了一个“暴风影视库”的图标.看着很烦,删起来还比较麻烦,于是搜索了相关资源,自己写了个注册表处理文件,方便大家一键删除之. ...
- 【Hadoop】HDFS小结
- 关于 iOS 证书,你必须了解的知识
收录待用,修改转载已取得腾讯云授权 最新腾讯云技术公开课直播,提问腾讯W3C代表,如何从小白成为技术专家?点击了解活动详情. 作者 |陈泽滨 编辑 | 顾乡 从事iOS开发几年,越来越发现,我们的开发 ...
- 安装SpringExt以查看schema文件
安装SpringExt以查看schema文件 学习了:https://blog.csdn.net/ltianchao/article/details/43565167 spring ext啊 mvn ...
- MySQL存储过程详解 mysql 存储过程(转)
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- Redis 3.2.8 集群模式+Sentinel多Master部署
环境准备CentOS 7.3redis1 172.18.1.101:7001 masterredis2 172.18.1.102:7002 masterredis3 172.18.1.103:7003 ...
- Android设置拍照或者上传本地图片
效果例如以下: 看代码: MainActivity类中: package com.example.ceshidemo; import java.io.ByteArrayOutputStream; im ...
- python操作xml文件
一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...