题解 | #N皇后问题#

N皇后问题

http://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

运行时间18ms,超过75%

public class Solution {
    int answer;
    public int Nqueen (int n) {
        int to=n+1;
        //ans[1]为第一个皇后所在位置, 依此类推
        int[] ans=new int[to];
        //加了ans[0]占位,第一个皇后就可以不用单独遍历
        ans[0]=Integer.MIN_VALUE;
        dfs(ans,1,to);
        return answer;
    }
    public void dfs(int[] now,int n,int to){
        if(n==to){
            answer++;
            return;
        }
        //第n个皇后依次判断能够放在0到to-1的位置i上
        for(int i=0;i<to-1;i++){
            boolean flag=true;
            //依次判断第0到第n-1个皇后j的位置与n是否冲突
            for(int j=0;j<n;j++){
                int sub=n-j;
                int indexJ=now[j];
                //列差==行差则在对角线上
                if(indexJ+sub==i||indexJ-sub==i||i==indexJ){
                    //有冲突则判断下一个位置i+1
                    flag=false;
                    break;
                }
            }
            if(flag){
                now[n]=i;
                dfs(now,n+1,to);
            }
        }
    }
}
全部评论

相关推荐

做人要有梦想dji:最新工位查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务