您的位置:首页 > 产品设计 > UI/UE

N-Queens II--LeetCode

2015-04-13 16:13 309 查看
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;    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: