八皇后问题的暴力解决
来源:互联网 发布:淘宝等级规则 编辑:程序博客网 时间:2024/05/03 20:18
本解决办法不使用深奥的算法思想,有点暴力,仅供各位参考。
编程的思想是不断让计算机自己尝试解决八皇后的问题,直到得到了一个解决方案,所以每次运行程序时都可以得到一个八皇后的解决方案,但是每次得到的结果很可能不尽相同。
8*8的棋盘,首先从第一行开始下起,由计算机随机选择一个位置,位置选定后,将棋盘上与第一个皇后相冲突的位置全部标记为不可用。
然后是第二行,也是由计算机随机选择一个位置,当然如果选择到了已经不可用的位置就让计算机重新选择,直到选择到了一个符合规则的位置,选择好了后再将与第二个皇后相冲突的位置全部标记为不可用。
如是,进行第三行到第八行皇后的位置的选定。
显然,大多数情况下,在某一行会出现没有任何一个位置可以选择的情况,这说明此次布局失败了,这里我们就不回溯了,就让计算机从第一行重新下。
直到第八行也能放下皇后了,就将整个八皇后的布置情况输出。
经过测试,可以得到结果。这个算法是让计算机不停地随机地尝试,得到的结果也是随机的。
以下是该算法的java程序。
public class H6_20{public static void main(String[] args) {int matrix[][]= new int[8][8];int ran = -1;while(true){//初始化mateixfor(int i=0; i<8; ++i){for(int j=0; j<8; ++j){matrix[i][j] = 0;}}//first rowran = (int)(Math.random()*8);matrix[0][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[0][i] = -1;}}for(int i=0; i<8; ++i){if(i!=0){matrix[i][ran] = -1;}}for(int i=1; i<8; ++i){if( ran+i > 7){break;}matrix[0+i][ran+i] = -1;}for(int i=1; i<8; ++i){if( ran-i < 0 ){break;}matrix[0+i][ran-i] = -1;}dispaly(matrix);//second rowran = (int)(Math.random()*8);while(matrix[1][ran]!=0){ran = (int)(Math.random()*8);}matrix[1][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[1][i] = -1;}}for(int i=0; i<8; ++i){if(i!=1){matrix[i][ran] = -1;}}for(int i=1; i<7; ++i){if( ran+i > 7 ){break;}matrix[1+i][ran+i] = -1;}for(int i=1; i<7; ++i){if( ran-i < 0 ){break;}matrix[1+i][ran-i] = -1;}dispaly(matrix);//third rowif( (matrix[2][0]+matrix[2][1]+matrix[2][2]+matrix[2][4]+matrix[2][5]+matrix[2][6]+matrix[2][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[2][ran]!=0){ran = (int)(Math.random()*8);}matrix[2][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[2][i] = -1;}}for(int i=0; i<8; ++i){if(i!=2){matrix[i][ran] = -1;}}for(int i=1; i<6; ++i){if( ran+i > 7 ){break;}matrix[2+i][ran+i] = -1;}for(int i=1; i<6; ++i){if( ran-i < 0 ){break;}matrix[2+i][ran-i] = -1;}dispaly(matrix);//fourth rowif( (matrix[3][0]+matrix[3][1]+matrix[3][2]+matrix[3][4]+matrix[3][5]+matrix[3][6]+matrix[3][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[3][ran]!=0){ran = (int)(Math.random()*8);}matrix[3][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[3][i] = -1;}}for(int i=0; i<8; ++i){if(i!=3){matrix[i][ran] = -1;}}for(int i=1; i<5; ++i){if( ran+i > 7 ){break;}matrix[3+i][ran+i] = -1;}for(int i=1; i<5; ++i){if( ran-i < 0 ){break;}matrix[3+i][ran-i] = -1;}dispaly(matrix);//fifth rowif( (matrix[4][0]+matrix[4][1]+matrix[4][2]+matrix[4][4]+matrix[4][5]+matrix[4][6]+matrix[4][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[4][ran]!=0){ran = (int)(Math.random()*8);}matrix[4][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[4][i] = -1;}}for(int i=0; i<8; ++i){if(i!=4){matrix[i][ran] = -1;}}for(int i=1; i<4; ++i){if( ran+i > 7 ){break;}matrix[4+i][ran+i] = -1;}for(int i=1; i<4; ++i){if( ran-i < 0 ){break;}matrix[4+i][ran-i] = -1;}dispaly(matrix);//sixth rowif( (matrix[5][0]+matrix[5][1]+matrix[5][2]+matrix[5][4]+matrix[5][5]+matrix[5][6]+matrix[5][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[5][ran]!=0){ran = (int)(Math.random()*8);}matrix[5][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[5][i] = -1;}}for(int i=0; i<8; ++i){if(i!=5){matrix[i][ran] = -1;}}for(int i=1; i<3; ++i){if( ran+i > 7 ){break;}matrix[5+i][ran+i] = -1;}for(int i=1; i<3; ++i){if( ran-i < 0 ){break;}matrix[5+i][ran-i] = -1;}dispaly(matrix);//seventh rowif( (matrix[6][0]+matrix[6][1]+matrix[6][2]+matrix[6][4]+matrix[6][5]+matrix[6][6]+matrix[6][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[6][ran]!=0){ran = (int)(Math.random()*8);}matrix[6][ran] = 1;for(int i=0; i<8; ++i){if(i!=ran){matrix[6][i] = -1;}}for(int i=0; i<8; ++i){if(i!=6){matrix[i][ran] = -1;}}for(int i=1; i<2; ++i){if( ran+i > 7 ){break;}matrix[6+i][ran+i] = -1;}for(int i=1; i<2; ++i){if( ran-i < 0 ){break;}matrix[6+i][ran-i] = -1;}dispaly(matrix);//eightth rowif( (matrix[7][0]+matrix[7][1]+matrix[7][2]+matrix[7][4]+matrix[7][5]+matrix[7][6]+matrix[7][7])==-7 ) continue;ran = (int)(Math.random()*8);while(matrix[7][ran]!=0){ran = (int)(Math.random()*8);}matrix[7][ran] = 1;dispaly(matrix);break;}//display queensSystem.out.print("\n");for(int i=0; i<8; ++i){for(int j=0; j<8; ++j){System.out.print("| ");if(matrix[i][j]==1){System.out.print("Q");}else{System.out.print(" ");}}System.out.print("|"+"\n");}}//display functionpublic static void dispaly(int[][] array){System.out.print("\n");for(int i=0; i<8; ++i){for(int j=0; j<8; ++j){System.out.print("| ");System.out.printf("%2s" ,array[i][j]);}System.out.print("|"+"\n");}}}
0 0
- 八皇后问题的暴力解决
- 数据结构学习----“八皇后”问题的解决
- 回溯+栈解决八皇后的问题
- 八皇后问题的通过循环解决
- C++解决八皇后问题
- 递归解决八皇后问题
- c解决八皇后问题
- scala解决八皇后问题
- Java解决八皇后问题
- C# 解决八皇后问题
- lua解决八皇后问题
- 八皇后的问题
- 八皇后的问题
- 八皇后的问题
- c# 解决面向对象八皇后问题的实例
- 八皇后问题的解决(c语言)
- 八皇后问题使用排列的方法递归解决
- 【算法】用Lua解决八皇后的问题
- CHM文件打开空白是什么原因
- 设计模式之状态模式
- 打开和关闭手机扬声器
- 24、Cocos2dx 3.0游戏开发找小三之网格动作:高炫酷的3D动作
- 八大无法解释的神秘声音
- 八皇后问题的暴力解决
- List集合整理
- linux下svn服务器安装配置
- 紧凑型车、中型车、SUV等车型区别及解释
- 阿萨德滴答滴答滴答滴答滴答滴答滴答滴答
- 第二十周自由练习项目——acm——类模板
- Android include标签的使用
- apache http server 安装配置
- HDU 1754 I Hate It