个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗?怎么写?
1条回答
- curry_du 2016-04-12 00:04关注
八皇后问题,java实现
public class Queen8 { public static int num = 0; //累计方案总数 public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数 public static int[] cols = new int[MAXQUEEN]; //定义cols数组,表示8列棋子摆放情况 public Queen8() { //核心函数 getArrangement(0); System.out.print("/n"); System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。"); } public void getArrangement(int n){ //遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true boolean[] rows = new boolean[MAXQUEEN]; for(int i=0;i<n;i++){ rows[cols[i]]=true; int d = n-i; if(cols[i]-d >= 0)rows[cols[i]-d]=true; if(cols[i]+d <= MAXQUEEN-1)rows[cols[i]+d]=true; } for(int i=0;i<MAXQUEEN;i++){ //判断该行是否合法 if(rows[i])continue; //设置当前列合法棋子所在行数 cols[n] = i; //当前列不为最后一列时 if(n<MAXQUEEN-1){ getArrangement(n+1); }else{ //累计方案个数 num++; //打印棋盘信息 printChessBoard(); } } } public void printChessBoard(){ System.out.print("第"+num+"种走法 /n"); for(int i=0;i<MAXQUEEN;i++){ for(int j=0;j<MAXQUEEN;j++){ if(i==cols[j]){ System.out.print("0 "); }else System.out.print("+ "); } System.out.print("/n"); } } public static void main(String args[]){ Queen8 queen = new Queen8(); } }
解决 无用评论 打赏 举报
悬赏问题
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?