您的位置:首页 > 其它

N皇后问题

2017-02-16 17:53 246 查看
n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在 n*n的棋盘上,互相不能攻击,输出全部方案。
输入一个正整数N,则程序输出N皇后问题的全部摆法。 输出结果里的每一行都代表一种摆法。行里的第i个数字 如果是n,就代表第i行的皇后应该放在第n列。 皇后的行、列编号都是从1开始算。
样例输入: 4
样例输出: 2 4 1 3  3 1 4 2


代码如下:

import java.util.Scanner;

public class Main {
static int N;
static int[] position;

//用来存放算好的皇后位置。最左上角是(0,0)
public static void NQueen(int k){
//在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
if ( k == N){
// N 个皇后已经摆好
System.out.print(position[0]+1);
for ( int i = 1 ; i < N ; i++){
System.out.print(" "+(position[i]+1));
}
System.out.println();
}else{
for ( int i = 0 ; i < N ; i++){
//逐尝试第k个皇后的位置
int j;
for( j = 0 ; j < k ; j++){
//和已经摆好的 k 个皇后的位置比较,看是否冲突
if ( position[j] == i || Math.abs(position[j]-i) == Math.abs(k-j)){
break;//冲突,则试下一个位置
}
}if ( j == k){
//当前选的位置 i 不冲突
position[j] = i;//将第k个皇后摆放在位置 i
NQueen(k+1);
}
}
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
N = in.nextInt();
position = new int
;
NQueen(0);//从第0行开始摆皇后
in.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: