八皇后问题

public class Queen {
static int N =8;
static int column[] = new int[N + 1]; // 同栏是否有皇后,1表示有
static int rup[] = new int[2 * N + 1]; // 右上至左下是否有皇后
static int lup[] = new int[2 * N + 1]; // 左上至右下是否有皇后
static int queen[] = new int[N + 1];


static int num = 0; // 解答编号


public static void main(String[] args) {
int i;
num = 0;
for (i = 1; i <= N; i++)
column[i] = 1;
for (i = 1; i <= 2 * N; i++)
rup[i] = lup[i] = 1;
backtrack(1);
}


static void showAnswer() {
int x, y;
System.out.println("解答 " + ++num);
for (y = 1; y <= N; y++) {
for (x = 1; x <= N; x++) {
if (queen[y] == x) {
System.out.print(" Q");
} else {
System.out.print(" .");
}
}
System.out.println("\n");
}
}


static void backtrack(int i) {
int j;
if (i > N) {
showAnswer();
} else {
for (j = 1; j <= N; j++) {
if (column[j] == 1 && rup[i + j] == 1 && lup[i - j + N] == 1) {
queen[i] = j;
// 设定为占用
column[j] = rup[i + j] = lup[i - j + N] = 0;
backtrack(i + 1);
column[j] = rup[i + j] = lup[i - j + N] = 1;
}
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值