⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eightqueen.java.txt

📁 运用递归算法实现了八皇后问题
💻 TXT
字号:
package bia.arithmetic;

import java.util.Date;


public class EightQueen {

Queen[] stack = new Queen[8];
int sp = 0;
int num = 0;

public EightQueen() {
  num = 8;
  stack = new Queen[num];
  sp = 0;
}

public EightQueen(int num) {
  this.num = num;
  stack = new Queen[num];
  sp = 0;
}


public void list() {
  System.out.println("Begin list the stack Point:");
  for (int i = 0; i < sp; i++) {
   stack[i].pos.println();
  }
  System.out.println("End list the stack Point:");
}


public void calc() {
  sp = 0;
  stack[sp++] = new Queen();
  while (sp >= 0 && sp <= num - 1) {
   Queen queen = getQueen(sp);
   if (null == queen) {
    boolean flag = true;
    while (flag) {
     --sp;
     if (sp < 0)
      break;
     if (stack[sp].pos.y == num - 1) {

     }
     else {
      stack[sp++].pos.y++;
      flag = false;
      for (int k = 0; k < sp - 1; k++) {
       if (stack[k].isUnderControl(stack[sp - 1].pos)) {
        flag = true;
        break;
       }
      }
     }
    }

   }
   else {
    stack[sp++] = queen;
   }
  }  
}

public Queen getQueen(int x) {
  boolean flag = true;
  int y = 0;
  while (flag) {
   flag = false;
   for (int i = 0; i < x; i++) {
    if (stack[i].isUnderControl(new Point(x, y))) {
     flag = true;
     break;
    }
   }
   if (flag && y <= num - 1) {
    y++;
   }
   else if (y >= num) {
    return null;
   }
  }
  return new Queen(new Point(x, y));
}

public static void main(String[] args) {
  EightQueen a = new EightQueen(20);
  long start = new Date().getTime();
  System.out.println("起始时间:[" + start + "]");
  a.calc();
  long end = new Date().getTime();
  System.out.println("截止时间:[" + end + "]");
  System.out.println("共耗时:[" + (end - start) + "]毫秒");
  if (a.sp > 0) {
   a.list();
  }
  else {
   System.out.println("这个题目无解!");
  }
}
}

class Point {
int x, y;

public void println() {
  System.out.println("The Point is [x,y]=[" + x + "," + y + "]");
}

public Point() {
  x = 0;
  y = 0;
}

public Point(int x, int y) {
  this.x = x;
  this.y = y;
}

public int getX() {
  return x;
}


public int getY() {
  return y;
}


public void setX(int x) {
  this.x = x;
}


public void setY(int y) {
  this.y = y;
}
}

class Queen {
Point pos;
public Queen() {
  pos = new Point();
}
public Queen(Point pos) {
  this.pos = pos;
}
public boolean isUnderControl(Point point) {
  boolean ret = true;
  if (point.x != pos.x
   && point.y != pos.y
   && Math.abs(point.x - pos.x) != Math.abs(point.y - pos.y)
   && Math.abs(point.x + point.y) != Math.abs(pos.x + pos.y)) {
   ret = false;
  }
  return ret;
}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -