java n皇后问题 详细源代码 并且把结果一一打印出来了
原创
©著作权归作者所有:来自51CTO博客作者初学java的小菜的原创作品,请联系作者获取转载授权,否则将追究法律责任
package Nqueen;
import java.util.Scanner;
public class nQueen {
public static int vrb1;//定义一个全局变量用来使用
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
System.out.println("请输入数组大小>:");
int num1=sc.nextInt();
//创建目标大小的数组
int[] arrn = new int[num1];
qunn qunn1 = new qunn();
//运行
qunn1.put(arrn,0);
}
}
class vrb1{
int num1=0;
}
class qunn{
public void put(int[] arrn,int n){
if (n==arrn.length){
for (int i =0;i<arrn.length;i++){
System.out.print(arrn[i]+1+" ");
}
System.out.println(); //当一个换行符号用
System.out.println("over");
}
else{
for (int i=0;i<arrn.length;i++) {
arrn[n] = i ;
//如果此次放置没有产生冲突,则进入下一节分支
if (judge1(arrn, n)){
put(arrn,n+1);
}
}
}
}
//判断arr1中的第N位是否和前面的内容冲突
//这个方法和8皇后的内容相同
public boolean judge1(int[] arr1,int n){
for (int i = 0; i < n; i++) {
if (arr1[i] == arr1[n] || Math.abs(n - i) == Math.abs(arr1[n] - arr1[i])) {
return false;
}
}
return true;
}
}
效果图 如下