前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >N皇后问题

N皇后问题

作者头像
AI那点小事
发布2020-04-20 16:47:17
3350
发布2020-04-20 16:47:17
举报
文章被收录于专栏:AI那点小事
代码语言:javascript
复制
        n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在 n*n的棋盘上,互相不能攻击,输出全部方案。 
        输入一个正整数N,则程序输出N皇后问题的全部摆法。 输出结果里的每一行都代表一种摆法。行里的第i个数字 如果是n,就代表第i行的皇后应该放在第n列。 皇后的行、列编号都是从1开始算。 
        样例输入: 4 
        样例输出: 2 4 1 3  3 1 4 2 

代码如下:

代码语言:javascript
复制
import java.util.Scanner;

public class Main {
    static int N;
    static int[] position;

    //用来存放算好的皇后位置。最左上角是(0,0) 
    public static void NQueen(int k){
         //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后 
        if ( k == N){
            // N 个皇后已经摆好 
            System.out.print(position[0]+1);
            for ( int i = 1 ; i < N ; i++){
                System.out.print(" "+(position[i]+1));
            }
            System.out.println();
        }else{
            for ( int i = 0 ; i < N ; i++){
                //逐尝试第k个皇后的位置 
                int j;
                for( j = 0 ; j < k ; j++){
                    //和已经摆好的 k 个皇后的位置比较,看是否冲突 
                    if ( position[j] == i || Math.abs(position[j]-i) == Math.abs(k-j)){
                        break;//冲突,则试下一个位置 
                    }
                }if ( j == k){
                    //当前选的位置 i 不冲突 
                    position[j] = i;//将第k个皇后摆放在位置 i 
                    NQueen(k+1);
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        N = in.nextInt();
        position = new int[N];
        NQueen(0);//从第0行开始摆皇后 
        in.close();
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档