约瑟夫问题是n个人排成一圈,数到k出队列,计算出圈的次序。一般利用循环链表进行求解。但是利用STL中的list,可以更加方便。以下函数输出所有人的出圈次序。
void Joseph(int n, int k)
{ // 初始化一个n个数据的线性表
list L;
for(int i=1; i<=n; i++)
L.push_back(i); // 数数、出列
list::iterator it=L.begin();
while(L.size()>0)
{
for(int i=1; i
it++;
if(it==L.end()) it=L.begin();
// 以此构成循环数数
}
cout<<*it<<" "; // 出列的人
// 删除
list::iterator delit = it;
it++;
if(it==L.end()) it=L.begin();
L.erase(delit);
}
}



