zoukankan      html  css  js  c++  java
  • 回溯递归:八皇后

     1 public static int[][] arry=new int[8][8];//棋盘,放皇后
     2 public static int map=0;//存储方案结果数量
     3 
     4 public static void main(String[] args) {
     5     // TODO Auto-generated method stub
     6 
     7     System.out.println("八皇后问题");
     8     findQueen(0);
     9     System.out.println("八皇后问题共有:"+map+"种可能");
    10 }
    11 
    12 public static void findQueen(int i){//寻找皇后节点
    13     if(i>7){//八皇后的解  
    14         map++;
    15         print();//打印八皇后的解
    16         return;
    17     }
    18     
    19     for(int m=0;m<8;m++){//深度回溯,递归算法
    20         if(check(i,m)){//检查皇后摆放是否合适
    21             arry[i][m]=1;
    22             findQueen(i+1);
    23             arry[i][m]=0;//清零,以免回溯的时候出现脏数据
    24             }
    25     }   
    26 }
    27 
    28 public static boolean check(int k,int j){//判断节点是否合适
    29     for(int i=0;i<8;i++){//检查行列冲突
    30          if(arry[i][j]==1){
    31                 return false;
    32          }
    33     }
    34     for(int i=k-1,m=j-1; i>=0 && m>=0; i--,m--){//检查左对角线
    35         if(arry[i][m]==1){
    36                 return false;
    37         }
    38     }
    39     for(int i=k-1,m=j+1; i>=0 && m<=7; i--,m++){//检查右对角线
    40         if(arry[i][m]==1){
    41                 return false;
    42         }
    43     }
    44     return true;
    45 }
    46 
    47 public static void print(){//打印结果
    48     System.out.print("方案"+map+":"+"
    ");
    49     for(int i=0;i<8;i++){
    50         for(int m=0;m<8;m++){
    51             if(arry[i][m]==1){  
    52                 //System.out.print("皇后"+(i+1)+"在第"+i+"行,第"+m+"列	");
    53                 System.out.print("o ");
    54             }
    55             else{
    56                     System.out.print("+ ");
    57             }
    58         }
    59         System.out.println();
    60     }
    61     System.out.println();
    62 }

    链接:https://www.jianshu.com/p/65c8c60b83b8

    天助自助者
  • 相关阅读:
    jQuery入门教程
    vue-lazyload 图片不更新
    Eggjs 设置跨域请求
    Vue.js错误: Maximum call stack size exceeded
    ubuntu nginx ssl 证书配置
    ubuntu 安装nginx, 出现 Unable to locate package
    nginx 判断移动端或者PC端 进入不同域名
    node.js 生成二维码
    Linux 配置ssh 免密码登录
    nodejs 从部署到域名访问
  • 原文地址:https://www.cnblogs.com/ZeGod/p/10488357.html
Copyright © 2011-2022 走看看