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
相关文章阅读
- 房屋租赁合同范本,房屋租赁合同常用版,房屋租赁合同标准版,房屋租凭合同
- 事故应急救援预案培训,事故应急救援培训,事故及救援应急管理,事故应急救援管理培训
- 关于开展“我的中国梦”书法、绘画、摄影、艺术设计比赛的通知,书法绘画摄影比赛方案,中国梦书法比赛作品展,中国梦书法比赛
- 大学生入党动机,大学生入党动机怎么说,大学生入党动机和目的,大学生入党动机调查与分析
- 交通事故财产险座谈会,交通事故专项预案,交通事故预防措施,预防交通事故专项座谈会
- 新生入学教育新闻稿,14级新生入党启蒙教育,安全教育大会新闻稿,14级新生教育大会新闻稿
- 加盟意向书范本,加盟合作意向书,加盟合作意向书范本,海燕加盟意向书
- 高温中暑应急预案演练,高温应急预案,高温烫伤应急预案,异常高温应急预案
- ,上诉人张传明因一审原告陈新华等20名村民诉桐柏县人民政府及第三人张传明林权登记一案二审行政判决书
- 员工转岗审批表,转岗人员申请审批表,转岗申请书,转岗审批表
- 远离网络游戏主题班会,网络安全主题班会,网络安全教育主题班会,关于网络的班会
- 毕业班工作措施,初中毕业班工作措施,六年级毕业班工作措施,毕业班班主任工作措施
- 爱卫组织网络图,爱卫组织制度,爱卫组织机构及网络图,爱卫组织管理
- 总监办工具发放登记表,文件发放登记表,礼品发放登记表,一孩生育证发放登记表