您的位置:首页 > 其它

约瑟夫环问题(循环链表表示)

2009-05-10 10:44 225 查看
 

#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);
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include delete null 游戏