题目链接
在学数据结构的时候学过这个问题,当时也是半懂不懂的状态,以为后面也没啥用了。
这不,现在让我重新面对这个题目,显得很狼狈。
上ac代码
import java.util.*;
import java.math.*;
public class Main {
public static int res=0,n;
public static int[] a;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
a=new int[n];
sh(0,n);
System.out.println(res);
}
public static void sh(int r,int n){
if(r==n){
res++;
if(res<=3)
print();
return;
}
for(int i=0;i<n;i++){
a[r]=i;
if(pan(r)){
sh(r+1,n);
}
}
}
public static boolean pan(int x){
for(int i=0;i<x;i++){
if(a[i]==a[x]||Math.abs(x-i)==Math.abs(a[i]-a[x]))
return false;
}
return true;
}
public static void print(){
for(int i=0;i<n;i++)
System.out.print(a[i]+1+" ");
System.out.println();
}
}