思路
用递归代替多重循环,经典的N皇后问题,过程见代码注释~
题解
import java.util.*;
public class Main {
static int N;
static int[] queenPos = new int[100];
public static void NQueen(int k){
//在0-k-1行皇后摆好的情况下,摆第k行及以后
int i;
if(k==N){
for(i=0;i<N;i++)
System.out.print(queenPos[i]+1+" ");
System.out.println();
return;
}
for(i=0;i<N;i++){//逐个尝试第k个皇后的位置
int j;
for(j=0;j<k;j++)
if(queenPos[j]==i||Math.abs(queenPos[j]-i)==Math.abs(k-j)){
break;//在同一斜线上,冲突
}
if(j==k){//当前所选的位置i不冲突
queenPos[k] = i;
NQueen(k+1);
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
N = sc.nextInt();
if(N==0) break;
NQueen(0);
}
}
}