个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗?怎么写?
1条回答
关注 皇后问题的实现,参考:
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(); } }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
- ¥50 成都蓉城足球俱乐部小程序抢票
- ¥15 yolov7训练自己的数据集
- ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
- ¥15 电力市场出清matlab yalmip kkt 双层优化问题
- ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
- ¥20 matlab yalmip kkt 双层优化问题
- ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
- ¥88 实在没有想法,需要个思路
- ¥15 MATLAB报错输入参数太多