N-Queens II--LeetCode

来源:互联网 发布:java 重定向 编辑:程序博客网 时间:2024/05/10 22:01

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

思路:使用组合的方式来判断,加入每一列排放一个,那么看行怎么排序,如果0~n的数,进行全排列,第i个位置上的数是什么代表第I个皇后放到这个列。

每一个排列就需要判断是否合法,这个时候只需要判断是否在斜线上即可。

bool Check(vector<int>& vec){   int i,j;   for(i=0;i<vec.size();i++)   {     for(j=i+1;j<vec.size();j++)      if(i-j == vec[i]-vec[j] || j-i == vec[i]-vec[j])       return false;                          }     return true;  }int Permutation(vector<int>& vec,int index,int& count){   int i;   if(index == vec.size())   {       if(Check(vec))         count++;           }   for(i=index;i<vec.size();i++)   {            swap(vec[index],vec[i]);      Permutation(vec,index+1,count);      swap(vec[index],vec[i]);                                }   return count;}   int totalNQueens(int n) {    vector<int> vec(n);    for(int i=0;i<n;i++)     vec[i] =i;    int count=0;    Permutation(vec,0,count);    return count;    }


0 0