八皇后问题分析以及解决
八皇后:

思路分析:
实现代码:
public class Test03_八皇后问题 { //统计解决方案的个数 static int count = 0; //定义max,表示一共有多少个皇后 int max = 8; //定义数组,用于存储八皇后的解法 int[] array = new int[max]; public static void main(String[] args) { //获取1970-1-1 00:00:00 000到现在的毫秒数 long nowTime = System.currentTimeMillis(); long begin = System.currentTimeMillis();//记录程序开始时间 Test03_八皇后问题 bhh = new Test03_八皇后问题(); bhh.check(0); System.out.println("八皇后问题的解决方法有:"+count+"种"); long end = System.currentTimeMillis();//记录程序结束时间 System.out.println("程序运行的毫秒数是:"+(end-begin)+"毫秒"); } //编写一个方法放置第n+1个皇后 private void check(int n){ if (n == max){//如果n=8的话就说明最后一个皇后已经放置完成了,因为数组是从下标0开始的 print(); return; } //依次放入皇后,并判断是否冲突 for (int i=0;i<max;i++){ array[n] = i;//先把这个皇后n放在该行的第i列,也就是先放在第一个位置开始 if (conflict(n)){//如果与上个皇后不冲突 //接着开始放置第i+1个皇后 check(n+1); } //如果冲突,就把这个这个皇后放在本行的后面一个位置上,就会继续执行array[n] = i;因为i是要先++的 } } /** * 放置第n个皇后,就去检测皇后是否和前面已经摆放的皇后冲突 * @param n 表示是第几个皇后 * @return */ private boolean conflict(int n){ for (int i=0;i<n;i++){ //array[i] == array[n] :判断第n个皇后和前面一个皇后是否在同一列 //Math.abs(n-i) == Math.abs(array[n] - array[i]):判断第n个皇后和前面一个皇后是否在同一斜线 //Math.abs(1-0) 等于 {Math.abs(array[1] - array[0])}==(1 - 0 = 1) if (array[i] == array[n] || Math.abs(n-i) == Math.abs(array[n] - array[i])){ return false; } } return true; } //定义打印输出皇后的摆放位置 public void print(){ count++; for (int i=0;i<array.length;i++){ System.out.print(array[i]+" "); } System.out.println(); } }
测试:
我这里就只列出了测试程序的一部分,感兴趣的可以自己动手画一画图,自己去试下。
也可以自行通过以下的方法调用测试自己计算机计算八皇后问题的时间戳。
System.currentTimeMillis();
PS:计算机真强大!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话