HW6.22
import java.util.Arrays; public class Solution { public static void main(String[] args) { int[][] chessboard = new int[8][8]; int[][] answerSave = new int[92][8]; int[] oneAnswer = new int[8]; while(true) { putQueens(chessboard); if(judgeCorrect(chessboard) == true) { oneAnswer = convert(chessboard); if(!contain(answerSave, oneAnswer)) { drawChessboard(chessboard); putIn(answerSave, oneAnswer); if(isFull(answerSave)) break; } else clearChessboard(chessboard); } else clearChessboard(chessboard); } } //put 8 queens on the chessboard randomly public static void putQueens(int[][] array) { int position; for(int i = 0; i < 8; i++) { position = (int)(Math.random() * 8); array[i][position] = 1; } } //clear the chessboard public static void clearChessboard(int[][] array) { for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) array[i][j] = 0; } //judge if there is only one chess in a row public static boolean judgeRow(int[][] array, int x, int y) { for(int i = y - 1; i >= 0; i--) if(array[x][i] == 1) return false; for(int i = y + 1; i < 8; i++) if(array[x][i] == 1) return false; return true; } //judge if there is only one chess in a column public static boolean judgeColumn(int[][] array, int x, int y) { for(int i = x - 1; i >= 0; i--) if(array[i][y] == 1) return false; for(int i = x + 1; i < 8; i++) if(array[i][y] == 1) return false; return true; } //judge if there is only one chess in the lean from left-top to right-bottom public static boolean judgeLeanTopToBottom(int[][] array, int x, int y) { for(int i = x - 1, j = y - 1; i >= 0 && j >= 0; i--, j--) if(array[i][j] == 1) return false; for(int i = x + 1, j = y + 1; i < 8 && j < 8; i++, j++) if(array[i][j] == 1) return false; return true; } //judge if there is only one chess in the lean from left-bottom to right-top public static boolean judgeLeanBottomToTop(int[][] array, int x, int y) { for(int i = x + 1, j = y - 1; i < 8 && j >= 0; i++, j--) if(array[i][j] == 1) return false; for(int i = x - 1, j = y + 1; i >= 0 && j < 8; i--, j++) if(array[i][j] == 1) return false; return true; } //judge if all the queens are put correctly public static boolean judgeCorrect(int[][] array) { int[] putX = new int[8]; int[] putY = new int[8]; for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) if(array[i][j] == 1) { putX[i] = i; putY[i] = j; break; } for(int i = 0; i < 8; i++) { if(!(judgeRow(array, putX[i], putY[i]) && judgeColumn(array, putX[i], putY[i]) && judgeLeanTopToBottom(array, putX[i], putY[i]) && judgeLeanBottomToTop(array, putX[i], putY[i]))) return false; } return true; } //convert the 2D chessboard in a 1D array public static int[] convert(int[][] array) { int[] oneDQueen = new int[8]; for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) { if(array[i][j] == 1) oneDQueen[i] = j; } return oneDQueen; } //judge if the answer has been found public static boolean contain(int[][] largeArray, int[] littleArray) { for(int[] array: largeArray) if(Arrays.equals(array, littleArray)) return true; return false; } //put the answer in the answer-save array public static void putIn(int[][] largeArray, int[] littleArray) { int signI = 0; for(int i = 0; i < 92; i++) for(int j = 0; j < 7; j++) if(largeArray[i][j] == 0 && largeArray[i][j + 1] == 0) { signI = i; putIn(largeArray, littleArray, signI); return; } } public static void putIn(int[][] largeArray, int[] littleArray, int sign) { for(int i = 0; i < 8; i++) largeArray[sign][i] = littleArray[i]; } //judge if the array is full public static boolean isFull(int[][] largeArray) { for(int j = 0; j < 8; j++) if(largeArray[91][j] != 0) return true; return false; } public static void drawChessboard(int[][] array) { for(int i = 0; i < 8; i++) { for(int j = 0; j < 8; j++) { if(array[i][j] == 1) System.out.print("Q"); else System.out.print("-"); } System.out.println(); } } }
HW6.22的更多相关文章
- CENTOS 6.5 平台离线编译安装 Mysql5.6.22
一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...
- EC笔记:第4部分:22、所有成员都应该是private的
EC笔记:第4部分:22.所有成员都应该是private的 更简单的访问 用户不用记得什么时候该带上括号,什么时候不用带上括号(因为很确定的就要带上括号) 访问限制 对于public的成员变量,我们可 ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- Fedora 22中的Services and Daemons
Introduction Maintaining security on your system is extremely important, and one approach for this t ...
- Fedora 22中的RPM软件包管理工具
Introduction The RPM Package Manager (RPM) is an open packaging system that runs on Fedora as well a ...
- Fedora 22中的用户和用户组管理
The control of users and groups is a core element of Fedora system administration. This chapter expl ...
- Fedora 22中的日期和时间配置
Introduction Modern operating systems distinguish between the following two types of clocks: A real- ...
- Fedora 22中的DNF软件包管理工具
Introduction DNF is the The Fedora Project package manager that is able to query for information abo ...
随机推荐
- smarty 时间格式化date_format
代码如下:$smarty = new Smarty; $smarty->assign('yesterday', strtotime('-1 day')); $smarty->display ...
- spoj 1437
自己暴了一下不过 转一个 bfs... #include <cstdio> #include <vector> #include <queue> #incl ...
- 用CodeViz绘制函数调用关系图(call graph)
CodeViz是<Understanding The Linux Virtual Memory Manager>(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...
- 一步一步制作yaffs/yaffs2根文件系统(一)---储备好基础知识再打
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...
- Git教程(2)官方命令文档及常用命令表
http://www.cnblogs.com/angeldevil/archive/2013/11/26/3238470.html 1,官方命令文档 http://www.git-scm.com/do ...
- DOCTYPE, HTML和XHTML, Strict DTD和Transitional DTD, Quirks Mode和Standard Mode
在HTML里面声明DOCTYPE一般会有以下几种: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- C#中this在构造函数时的使用
今天编程的时候,想要用this来处理构造函数,想了半天没有想起来 后来找了自己以前记录的 http://www.cnblogs.com/chucklu/p/4842766.html public Cu ...
- Struts个人总结
编写Struts2第一个程序 Struts2是目前最流行的MVC框架,吸收了传统Struts和WebWork两者的精华,基于Struts2来进行开发可以大大减少开发时间,提高开发效率,并降低后期维护时 ...
- 如何查看你的 memcached 的状态
最近略忙,好久没有更新博客了,已长草,今天来除下草,好了,不废话了,开始! 现在很多web服务都会用到 memcached ,如何知道你的 memcached 是否正常工作,命中率如何呢,本文简单介 ...
- centos 如何用 rsyslog 搭建本地日志服务
一.问题背景 最近项目遇到一个问题,服务器响应很慢,team中的两个有经验的工程师找了一台服务器分析了一下,发现问题出在磁盘写入过于频繁.这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口, ...