ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章

Algorithm

完成八皇后 - 回溯算法

  1. /**
  2. * 回溯算法:八皇后
  3. * @author ouyb01
  4. * @date 2021/12/2 9:43
  5. */
  6. public class MyBacktracking {
  7. // 下标表示行, 值表示queen存储在哪一列
  8. int[] result = new int[8];
  9. public void cal8queens(int row) {
  10. // 8个棋子都放好了, 直接打印结果
  11. if (row == 8) {
  12. printQueens(result);
  13. return;
  14. }
  15. for (int column = 0; column < 8; column++) {
  16. if (isOk(row, column)) {
  17. // 符合要求, 将棋子放入对应位置, 开始下一轮的放置
  18. result[row] = column;
  19. cal8queens(row + 1);
  20. }
  21. }
  22. }
  23. /**
  24. * 判断row行column列放置是否合适
  25. */
  26. private boolean isOk(int row, int column) {
  27. int leftUp = column - 1, rightUp = column + 1;
  28. for (int i = row - 1; i >= 0; i--) {
  29. // 判断第i行的column列是否有棋子
  30. if (result[i] == column) {
  31. return false;
  32. }
  33. // result数组范围为0-7, 所以判断条件是>=0, <8
  34. // 判断第i行的左对角线是否有棋子
  35. if (leftUp >= 0 && result[i] == leftUp) {
  36. return false;
  37. }
  38. // 判断第i行的右对角线是否有棋子
  39. if (rightUp < 8 && result[i] == rightUp) {
  40. return false;
  41. }
  42. leftUp--;
  43. rightUp++;
  44. }
  45. return true;
  46. }
  47. /**
  48. * 打印一个二维矩阵
  49. */
  50. private void printQueens(int[] result) {
  51. for (int row = 0; row < result.length; row++) {
  52. for (int column = 0; column < 8; column++) {
  53. if (result[row] == column) {
  54. System.out.print("Q ");
  55. } else {
  56. System.out.print("* ");
  57. }
  58. }
  59. System.out.println();
  60. }
  61. // 每次递归都会打印, 每次打印结果换行展示
  62. System.out.println();
  63. }
  64. public static void main(String[] args) {
  65. MyBacktracking example = new MyBacktracking();
  66. example.cal8queens(0);
  67. }
  68. }

Review

Life and Death of an Object in Java

Tip

  1. MySQL中如果设置时间为23:59:59,需要注意毫秒数,如果毫秒数超过500ms,MySQL会自动加一秒。所以在设置这个时间的时候需要手动将毫秒数置为0。

    Share

    IOC/DIP其实是一种管理思想

    Finish

    预计完成时间:2021.12.13 ~ 2021.12.19
    实际完成时间:2021.12.19