8皇后问题
来源:互联网 发布:lcd1602只亮不显示数据 编辑:程序博客网 时间:2024/06/07 02:21
由于8皇后不能在同一行或者同一列也不能在同一对角线,所以我们只要控制排除错误的情况进行递归即可。既首先。开个答案数组为n行的。然后我们开始按先行后列放置,第一行里,从第一列放到最后列,看有没有冲突,全部有冲突就回到上一行。就是个简单的DNF。
我这里的代码修改下就可以当作N皇后求解了 。
import java.util.ArrayList;import java.util.List;public class EightQueen { int maxRow,maxCol,maxSize=8; int[] result=new int[maxSize]; List<int[]> list=new ArrayList<int[]>(); EightQueen() { maxRow=maxSize; maxCol=maxSize; for(int i=0;i<maxRow;i++) { result[i]=-1; } solveQueue(0); for(int j=0;j<list.size();j++) { System.out.println("答案"+(j+1)); for(int i=0;i<list.get(j).length;i++) { System.out.print((list.get(j)[i]+1)+" "); } System.out.println(); } } boolean solveQueue(int row) { if(row>=maxRow) { int[] temp=new int[result.length]; for(int i=0;i<result.length;i++) { temp[i]=result[i]; } list.add(temp); return false; } for(int i=0;i<maxCol;i++) { if(checkSafe(row,i)) { result[row]=i; if(solveQueue(row+1)) { return true; }else { result[row]=-1; } } } return false; } boolean checkSafe(int row,int col) { //行冲突 if(result[row]!=-1) { return false; } for(int i=0;i<row;i++) { //列冲突 if(result[i]==col) { return false; } //对角线冲突 if(Math.abs(i-row)==Math.abs(result[i]-col)) { return false; } } return true; } public static void main(String[] args) { EightQueen test=new EightQueen(); }}
这是八皇后所有解的可能
0 0
- 8皇后问题和N皇后问题
- 8皇后问题改进~
- 8皇后问题
- 8皇后问题求解
- 8皇后问题
- 8皇后问题
- 8皇后问题算法
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 【算法】8皇后问题
- 8皇后问题续
- 8皇后问题算法
- 8皇后问题
- date.items[i].createDateTime为空或者为undefined
- 在线购物系统实验一
- 脚本作业(test.sh)
- Lintcode 将数组重新排序以构造最小值
- 通过Spring Resource接口获取资源
- 8皇后问题
- javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
- 稳定排序:冒泡排序
- 编写程序,判断输入的字符串是否回文
- unity wav 格式音频转换为二进制文件
- 开发实用---修改Eclipse快捷注释的模板
- JSONCPP操作帮助
- 原始类型.Class 及 Class.forName(String class) 与 类名.class 的区别
- Linux下忘记MySQL的root密码的解决方法