zoukankan      html  css  js  c++  java
  • 几个比较经典的算法问题的java实现

    1.八皇后问题

     1 public class EightQueen {
     2 
     3     private static final int ROW = 16;
     4     private static final int COL = 16;
     5 
     6     private static int count = 0; // 八皇后的解的个数
     7 
     8     private static boolean[][] maps = new boolean[ROW][COL]; // 初始化二维数组,模拟8*8棋盘,默认值是false表示没有皇后
     9 
    10     // 如何去放皇后?
    11     /**
    12      * 防止第row行的皇后
    13      * @param row
    14      */
    15     public static void putQueen(int row) {
    16 
    17         // 递归的出口
    18         if (row == ROW) { // row=8时,已经到了第9行,那么前面的8行就是OK的
    19             printQueen();
    20             return;
    21         }
    22 
    23         // 把皇后放到第row行的第j列
    24         for (int j = 0; j < COL; j++) {
    25             // 如果可以放,就将皇后放在该点
    26             if (isOK(row, j)) {
    27                 maps[row][j] = true;
    28                 putQueen(row + 1); // 该行放好之后放下一行【递归去放皇后】,算法已经跳转
    29                 maps[row][j] = false; // 回溯,当放row+1行棋子不满足的时候,会回溯到第row行
    30             }
    31         }
    32     }
    33 
    34     // 如果要将皇后放在(x,y)点,则需要先判断该点是否可以放
    35     public static boolean isOK(int x, int y) {
    36 
    37         // 遍历二维数组,判断4个方向是否存在皇后
    38         for (int i = 0; i < ROW; i++) {
    39             for (int j = 0; j < COL; j++) {
    40                 // 正斜边x-y定值,逆斜边x+y为定值
    41                 if (i == x || j == y || i - j == x - y || i + j == x + y) {
    42                     // 判断4个方向是否存在皇后
    43                     if (maps[i][j]) { // 如果该点放了一个皇后,则返回false
    44                         return false;
    45                     }
    46                 }
    47             }
    48         }
    49 
    50         return true;
    51     }
    52 
    53     public static void printQueen() {
    54 
    55         System.out.println("第" + (++count) + "个解");
    56         System.out.println("*******************");
    57         for (int i = 0; i < ROW; i++) {
    58             for (int j = 0; j < COL; j++) {
    59                 if (maps[i][j]) {
    60                     System.out.print("Q ");
    61                 } else {
    62                     System.out.print("* ");
    63                 }
    64             }
    65             System.out.println();
    66         }
    67     }
    68 
    69     public static void main(String[] args) {
    70 
    71         putQueen(0);
    72     }
    73 }

    2.豆机(梅花瓶,高尔顿瓶问题)

    3.

  • 相关阅读:
    sql语句最后一行显示统计。
    Win10访问不到XP共享的解决:
    git-github-TortoiseGit综合使用教程(二)快速入门
    git-github-TortoiseGit综合使用教程(一)简介
    RHEL7 -- 修改主机名
    安装完 MySQL 后必须调整的 10 项配置(转)
    my.cnf
    mysql查看系统参数
    MySQL性能的五大配置参数(内存参数)
    (转)Linux用户登录记录日志和相关查看命令汇总
  • 原文地址:https://www.cnblogs.com/happyfans/p/4343557.html
Copyright © 2011-2022 走看看