#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
int m = 6;
QVector<bool> flags(m+1);
QStack<int> result;
for(int i=0; i<=m; ++i)
{
flags = false;
}
int n=1;
int number=2;
while (n > 0)
{
if (flags.at(number) == 0 && number != n)
{
result.push(number);
flags[number] = true;
if (n == m)
{
qDebug() << result;
n--;
int tmp = result.pop();
flags[tmp] = false;
tmp = result.pop();
flags[tmp] = false;
number = (tmp+1)%m;
}
else
{
n++;
number = (n+1) % m;
}
}
else if (number == n)
{ if (result.size() != 0)
{
int tmp = result.pop();
flags[tmp] = 0;
number = (tmp+1) % m;
}
n--;
}
else
{
number = (number+1) % m;
}
if (number == 0)
number = m;
}
}
1) 还是回溯
2)可以把条件再规整一下
3)考虑一下 好更快的算法没