八皇后问题及其优化
来源:互联网 发布:ubuntu wine安装qq 编辑:程序博客网 时间:2024/06/05 15:18
在棋盘上放置8个皇后,使得它们互不攻击,此时每个皇后的攻击范围为同行同列和同对角线,要求找出所有解,一个很简单的排列组合问题,每行每列每斜列只能有一个皇后
/** * Created by max on 17-5-14. */public class EightQueen { private static byte[][] map; static int key = 0; static byte[] row = new byte[8]; static int[] answer = new int[8]; public static void main(String[] args) { map = new byte[8][8]; location(0); } public static void location(int column) { if (column==8) { for (int i = 0 ;i<8;i++) System.out.print(" " + answer[i]); System.out.println(" "); return; } for (int i = 0;i<8 ;i++) { if (i!= 0) map[i-1][column] = 0; if (row[i] == 1) continue; row[i] = 1; answer[column] = i; if (attack(i,column)) { location(column+1); } if (i==7) map[7][column] = 0; row[i] = 0; } } public static boolean attack(int x,int y) { int i = 0; while(x+i<8&&y+i<8) { if (map[x+i][y+i] ==1) { return false; } i++; } i = 0; while(x-i>=0&&y-i>=0) { if (map[x-i][y-i] == 1) { return false; } i++; } i = 0; while (x-i>=0&&y+i<8) { if (map[x-i][y+i] == 1) { return false; } i++; } i = 0; while (x+i<8&&y-i>=0) { if (map[x+i][y-i] == 1) { return false; } i++; } i = 0; while(i<8) { if (map[x][i]==1||map[i][y]==1) { return false; } i++; } map[x][y] = 1; return true; }}
优化后
/** * Created by max on 17-5-14. */public class EightQueenBetter { static int row[] = new int[8]; public static void main(String[] args) { search(0); } static void search(int row_number) { if (row_number == 8) { for (int i = 0 ;i<8;i++) System.out.print(" "+row[i]); System.out.println(""); return; } for (int i =0 ;i<8;i++) { boolean ok = true; row[row_number] = i; for (int j = 0 ;j<row_number;j++) { if (row[row_number]==row[j]||row_number-row[row_number]==j-row[j]||row_number+row[row_number]==j+row[j]) { ok = false; break; } } if (ok) search(row_number+1); } }}
在优化
private static byte[][] accupied = new byte[3][15]; static void search2(int column) { if (column==8) { showAnswer(); return; } for (int i = 0;i<8;i++) { if (accupied[0][i]==0&&accupied[1][column+i]==0&&accupied[2][7-column+i]==0) { row[column] = i; accupied[0][i]=1; accupied[1][column+i]=1; accupied[2][7-column+i]=1; search2(column+1); accupied[0][i]=0; accupied[1][column+i]=0; accupied[2][7-column+i]=0; } } }
0 0
- 八皇后问题及其优化
- 八皇后及其优化
- 八皇后问题及其推广
- 回溯法解八皇后问题及再看八皇后问题优化
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题及其扩展N皇后问题(经典回溯算法)
- 我对八皇后问题的一点优化。
- 八皇后问题优化版:DFS剪剪剪
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题(2)
- 八皇后问题(3)
- 八皇后问题
- 八皇后问题程序
- 浅谈八皇后问题
- 八皇后问题
- 相对熵
- JVM--hotspot
- LoadRunner监控数据库服务器
- 在线云评测系统日志(一):系统架构的确定
- 特长生模拟——朋友
- 八皇后问题及其优化
- java线程基础知识
- Font Awesome插件的使用
- 没有OpenCV环境下运行OpenCV程序
- (19)版本控制
- web.xml 配置中classpath: 与classpath*:的区别
- 让ie7/8支持css3属性
- Andy的作业 (大数相乘)
- 网页爬取系列(一)爬取网页数据的一些小技巧