当前位置:编程学习 > JAVA >>

n皇后的算法的补充程序,在线等


/*
 * 须完成功能:
 * 在一个n*n的棋盘上,放置n个不能相互捕捉的国际象棋"皇后"的所有布局,以下是n皇后的算法,
 * 填写下面括号中有数数的,是需补充的程序
 * */
public class Queen {
private int n;
private int[] queenPos;
private double num = 0;

Queen(int d) {
n = d;
queenPos = new int[d];
}

// 放置皇后的方法
public void place(int row){
int i=0;
if(row==n){
(1);
}else{
for(i=0;i<n;i++){
queenPos[row]=i;
if(legality(row))
(2)

}
}
}

// 判断布局是否合法
private boolean legality(int list){
if(list==0){
return true;
}
for(int i=0;i<list;i++){
if(queenPos[i]==queenPos[list])
(3)
if((4))
return false;
}
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
try {
Queen q = new Queen(n);
q.place(0);
System.out.println("共有" + q.num + "种摆法");
} catch (Exception e) {
e.printStackTrace();
}

}

}

大家帮我看下,thanks --------------------编程问答-------------------- 大家帮我看下,多谢, --------------------编程问答-------------------- 不会,顶一下 --------------------编程问答-------------------- 继续顶。。。。。。。。。。。。。。。 --------------------编程问答-------------------- n皇后问题是使用回溯算法求解的代表问题?我想要C语言版的! --------------------编程问答-------------------- 有没有java版的呢, --------------------编程问答-------------------- 这题对于很多程序员来说都是偏难的 --------------------编程问答-------------------- 看着有人几行代码就解决了,我看都看不懂
public class EightQueen {
    static int sum = 0, upperlim = 1;
    private static void test(int row, int ld, int rd) {
        if (row != upperlim) {
            int pos = upperlim & ~(row | ld | rd);
            while (pos != 0) {
                int p = pos & -pos;
                pos -= p;
                test(row + p, (ld + p) << 1, (rd + p) >> 1);
            }
        } else{
            sum++;
        }
    }
    public static void main(String[] args) {
        int n = 5;
        long tm = System.currentTimeMillis();
        if ((n < 1) || (n > 32)) {
            System.out.println(" heh..I can't calculate that.");
            System.exit(-1);
        }
        System.out.println(n + " Queens");
        upperlim = (upperlim << n) - 1;
        test(0, 0, 0);
        System.out.println("Number of solutions is " + sum + ", Useing "
                + (System.currentTimeMillis() - tm) / 1000 + " seconds");
    }
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,