#include "CircList.h"
template<class T>
void Josephus(CircList<T> &Js,int n,int m) //n---总数,m---目标数
{
CircLinkNode<T> *p = Js.GetHead()->link,*pre = NULL;
for (int i = 0;i < n-1;++i) //执行n-1次
{
for (int j = 1;j < m;++j) //数m个人
{
pre = p;
p = p->link;
if(p == Js.GetHead())
{
p = p->link;
pre = pre->link;
}
}
cout<<"出列的人是:"<<p->data<<endl;
pre->link = p->link;
delete p;
p = pre->link;
if(p == Js.GetHead())
{
p = p->link;
pre = pre->link;
}
}
}
void main()
{
CircList<int> clist;
int n,m;
cout<<"输入游戏者人数和报数间隔:";
cin>>n>>m;
for(int i = 1;i <= n;++i)
clist.Insert(i-1,i);
Josephus(clist,n,m);
}
本文介绍了一个基于约瑟夫环问题的经典算法实现。通过使用循环链表结构,该算法展示了如何模拟约瑟夫环中人们按特定顺序出列的过程,并最终找出最后一个留在环中的人。适用于理解递归及数据结构的初学者。

1万+

被折叠的 条评论
为什么被折叠?



