八皇后问题

来源:互联网 发布:网络流行的词 编辑:程序博客网 时间:2024/05/29 19:03

题目描述

请设计一种算法,解决著名的n皇后问题。这里的n皇后问题指在一个nxn的棋盘上放置n个棋子,使得每行每列和每条对角线上都只有一个棋子,求其摆放的方法数。

给定一个int n,请返回方法数,保证n小于等于10

测试样例:

1

输出:

1

import java.util.*; public class Queens {    public int sum=0;    public int nQueens(int n) {        sum=0;        int[] cols=new int[n];        helper(cols,n,0);        return sum;    }     //n是总行数,row是已经探测到的行数,cols是一个竖列数组,下标是row,值是column的值    private void helper(int[] cols, int n, int row){        if(row==n){//走到这一步的都成功了            sum++;            return;        }                for(int i=0;i<n;i++){//这种做法很像是求字符串的全排列            if(isValid(cols,row,i)){//如果没有valid将会退出,不会继续下去,这条线也就是断了                cols[row]=i;                helper(cols,n,row+1);            }else                continue;        }    }         private boolean isValid(int[] cols, int row, int col){//可以放置         for(int i=0;i<row;i++){            if(cols[i]==col){//不能有同列的,同行的不会,因为是row+1来遍历的                return false;            }             if((row-i)==Math.abs(cols[i]-col)){//不能对角线                return false;            }        }        return true;    }   }


0 0
原创粉丝点击