N皇后问题【Java】

    xiaoxiao2021-04-12  35

    利用递归的方法来实现N皇后的求解

    import java.util.Scanner;

    public class Main { static int count=1; static int N; static int[] queenposition = new int[100]; public static void queen(int n) { int j=1; for(int i=1;i<=N;i++)//为第n行的皇后寻找合适的摆放位置 { for(j=1;j<n;j++) { if(queenposition[j]==i||Math.abs(j-n)==Math.abs(queenposition[j]-i)) break; } if(j==n) { queenposition[n]=i; if(n!=N) queen(n+1); } if(j==n&&n==N) { System.out.print((count++)+"->"); for(int k=1;k<=N;k++) { System.out.print(queenposition[k]+" "); } System.out.print("\n");return; } } } public static void main(String[] args) { Scanner in = new Scanner(System.in); N=in.nextInt(); queen(1); }

    }

    将代码稍微改下就可以是八皇后的求解代码

    import java.util.Scanner; public class Main { static int count=1; static int N=8; static int[] queenposition = new int[100]; public static void queen(int n,int mb) { int j=1; for(int i=1;i<=N;i++)//为第n行的皇后寻找合适的摆放位置 { for(j=1;j<n;j++) { if(queenposition[j]==i||Math.abs(j-n)==Math.abs(queenposition[j]-i)) break; } if(j==n) { queenposition[n]=i; if(n!=N) queen(n+1,mb); } if(j==n&&n==N) { if(count++==mb) { for(int k=1;k<=N;k++) { System.out.print(queenposition[k]+""); } System.out.print("\n");return; } } } } public static void main(String[] args) { Scanner in = new Scanner(System.in); int k=in.nextInt(); for(int i=1;i<=k;i++) { int mb=in.nextInt(); queen(1,mb); count=1; } } }

    这里是令N等于八并输出指定解

    import java.util.Scanner; public class Main { static int count=1; static int N=8; static int[] queenposition = new int[100]; public static void queen(int n) { int j=1; for(int i=1;i<=N;i++)//为第n行的皇后寻找合适的摆放位置 { for(j=1;j<n;j++) { if(queenposition[j]==i||Math.abs(j-n)==Math.abs(queenposition[j]-i)) break; } if(j==n) { queenposition[n]=i; if(n!=N) queen(n+1); } if(j==n&&n==N) { System.out.println("No. "+(count++)); for(int a=1;a<=8;a++) { for(int b=1;b<=8;b++) { if(queenposition[b]==a) { System.out.print("1 "); }else System.out.print("0 "); }System.out.println(""); } } } } public static void main(String[] args) { Scanner in = new Scanner(System.in); queen(1); } }

    这是用矩阵的形式输出八皇后问题的全部解

    转载请注明原文地址: https://ju.6miu.com/read-667913.html

    最新回复(0)