NPC问题——回溯算法、聚类分析

来源:互联网 发布:运行u启动windows 编辑:程序博客网 时间:2024/05/22 06:48
public class queen { private int[] box;//检查同行和同列是否有Qprivate int[] rl; //检查左下和右上是否有Qprivate int[] lr; //检查左上和右下是否有Qprivate int[] queen; //解答private int num; // 解答编号 public  queen() { //构造函数box = new int[8+1];lr = new int[2*8+1]; rl = new int[2*8+1]; for(int i = 1; i <= 8; i++) box[i] = 1; for(int i = 1; i <= 2*8; i++)lr[i] = rl[i] = 1; queen = new int[8+1]; } public void backtrack(int i) //确定位置{ if(i > 8) { show(); } else { for(int j = 1; j <= 8; j++) { if(box[j] == 1 && lr[i+j] == 1 && rl[i-j+8] == 1) { queen[i] = j; // 设定为占用 box[j] = lr[i+j] = rl[i-j+8] = 0;backtrack(i+1); box[j] = lr[i+j] = rl[i-j+8] = 1; } } } }protected void show() //显示解答{num++;if(num>=4){return;}else{System.out.println("\n解答 :" + num);for(int y = 1; y <= 8; y++){ for(int x = 1; x <= 8; x++) { if(queen[y] == x) { System.out.print(" Q"); } else { System.out.print(" x"); } }System.out.println(); } }}public static void main(String[] args) { queen queen = new queen(); queen.backtrack(1); }}


参考程序:百度百科“皇后问题”

0 0
原创粉丝点击