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