n皇后问题 java,回溯法解决n皇后问题,n皇后 回溯法 java,n皇后问题解决方案.java QQ空间素材网 > 回溯法n皇后问题java > n皇后问题 java,回溯法解决n皇后问题,n皇后 回溯法 java,n皇后问题解 正文

n皇后问题 java,回溯法解决n皇后问题,n皇后 回溯法 java,n皇后问题解决方案.java

发布时间:2014-02-22 来源: 回溯法n皇后问题java

经典n皇后问题java代码实现的相关文章:问题描述:在n*n的二维表格,把n个皇后在表... 要求同一行、同一列或同一斜线上不能有2个以上的皇后. 例如八皇后有92种解决方案,...

n皇后问题解决方案.java 八皇后问题是一个比较经典的问题 .关于他的解决方案较多 .比如回溯法等 ,现介绍一种全 排列算法解决n皇后问题;

这个算法的想法是建立一个数组A={0,1,2,.......n-1};A[i]用来表示第i行的皇后所在 的列数(起始行和列均设为0)则A必须满足: A[i]!=A[j]且(Math.abs(A[i]-A[j])!=Math.abs(i-j));

现我们对数组A进行全排列,再把符合条件的排列输出即可 import java.util.Scanner;

public class 八皇后所有解决方案{ public static void main(String[] args){ Scanner input=new Scanner(System.in);

System.out.print("请输入皇后个数:(设皇后有n个,则棋盘大小为n*n)");

int n=input.nextInt();

int[]A = new int[n];

for(int i=0;i<A.length;i++){ A[i]=i;

} int[][]B=quanpl(A);

int count=0;

for(int k=0;k<B.length;k++){ if(JG(B,k,A.length)==true){ count++;

System.out.println(n+"

皇 后 第 "+count+"

种 解 决 方 案:\n----------------------------------------------");

for(int i=0;i<A.length;i++){ System.out.print("┃");

for(int j=0;j<B[k][i];j++){ System.out.print("╳┃");

} System.out.print("Q ┃");

for(int j=0;j<A.length-B[k][i]-1;j++){ System.out.print("╳┃");

} System.out.println("");

} System.out.println("

----------------------------------------------");

} } } public static long fun(int n){//返回int型整数n的阶乘 long a=1; for(int i=1;i<n+1;i++){ a*=i;

} return a;

} public static int[][] pailie(int n){//求整数0~(n-1)的排列情况;并把0~(n-1) 的第i种排列存放在二维数组B的第i行中 int[][]B=new int[(int)fun(n)][];

for(int i=0;i<B.length;i++){//声明二维数组B每行的列数 B[i]=new int[n];

} B[0][0]=0;

for(int m=1;m<n;m++){ int[][]C=new int[(int)fun(m)][];//创建二维数组C,并声明二维数组C的行 数 for(int i=0;i<C.length;i++){//声明二维数组C每行的列数 C[i]=new int[m];

} for(int i=0;i<C.length;i++){//将B[i][j]的值存储在中间桥C[i][j]中 for(int j=0;j<m;j++){ C[i][j]=B[i][j];

} } for(int i=0;i<C.length;i++){//计算出B[][]的值 for(int j=0;j<m+1;j++){ B[(m+1)*i+j][m-j]=m;

for(int k=0;k<m-j;k++){ B[(m+1)*i+j][k]=C[i][k];

} for(int k=m-j+1;k<m+1;k++){ B[(m+1)*i+j][k]=C[i][k-1];

} } } } return B;

} public static int[][] quanpl(int[]A){//求A数组的全排列,并把数组A的第i种排列 存放在二维数组B的第i行中 int[][]B=new int[(int)fun(A.length)][];

for(int i=0;i<B.length;i++){//声明二维数组B每行的列数 B[i]=new int[A.length];

} int[][]C=pailie(A.length); for(int i=0;i<B.length;i++){ for(int j=0;j<A.length;j++){ B[i][j]=A[C[i][j]];

} } return B;

} public static boolean PDTL(int[][]A,int k,int i,int j){//判断皇后是否同列 或同对角线;不同行且不同对角线则返回true return A[k][i]!=A[k][j]&&(Math.abs(A[k][i]-A[k][j])!=Math.abs(i-j))? true:false;

} public static boolean JG(int[][]A,int k,int n){ for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ if(PDTL(A,k,i,j)==false) return false;

} } return true;

} }

一段关于皇后问题的代码这是我能写出来的最简单的了!希望大家能够喜欢! 资源积分:... C++入门到精通的四本书超经典.PDF 程序员给女朋友做的精美3D相册 Java从零基础到精...

问题出在backTrack() 中内层while循环,内层while循环的循环体只是 x[k] += 1;其他的都是外层while循环的循环体。这样就是你想要的结果了。

N 皇后问题的Java 程序实现及分析 20l1 年第3 朗 ' 算机与觋代化 JISUANJIYUXIANDAI}{UA 总第187 期 文章编号:1006—2475(20l1)034)015-02 N 皇后问题的Java 程序实现及分析 ...

n皇后问题 java,回溯法解决n皇后问题,n皇后 回溯法 java,n皇后问题解决方案.java》出自:QQ空间素材网
链接地址:http://www.qzoneai.com/sucai/y68TU2zfqh89y5fT.html

相关文章阅读

网站地图 | 关于我们 | 联系我们 | 广告服务 | 免责声明 | 在线留言 | 友情链接 | RSS 订阅 | 热门搜索
版权所有 QQ空间素材网 www.qzoneai.com

n皇后问题 java,回溯法解决n皇后问题,n皇后 回溯法 java,n皇后问题解决方案.java