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

N-Queens II

2015-01-15 10:17 106 查看
class Solution {
public:
Solution():cnt(0){}
int cnt;
bool isValide(const vector<int>& pos)
{
for(int i=0;i<pos.size();++i)
{
for(int j=i+1;j<pos.size();++j)
{
int diff=pos[j]-pos[i];
if(diff<0)
{
diff=-diff;
}
if(diff==(j-i))
{
return false;
}
}
}
return true;
}
void mpermulate(int start,vector<int>& pos,vector<int>& origin)
{
if(start==origin.size())
{
if(isValide(pos))
{
cnt++;
}
return;
}
//提前结束
if(!isValide(pos))
{
return;
}
for(int i=start;i<origin.size();++i)
{
int tmp=origin[i];
origin[i]=origin[start];
origin[start]=tmp;
pos.push_back(origin[start]);
mpermulate(start+1,pos,origin);
pos.pop_back();
tmp=origin[i];
origin[i]=origin[start];
origin[start]=tmp;
}
}
int totalNQueens(int n) {
vector<int> pos;
vector<int> origin;
for(int i=0;i<n;++i)
{
origin.push_back(i);
}
mpermulate(0,pos,origin);
return cnt;
}
};


与N-Queens做法一样,甚至更简单,只需要统计合法的个数就行了,但感觉应该还有更优的做法,欢迎分享更快的做法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm leetcode