您的位置:首页 > 其它

循环链表 约瑟夫环

2013-05-27 22:42 274 查看
//约瑟夫环问题,n个人,从k个人开始报数,喊道m的人出列
#include <iostream>
#define ERROR 0
using namespace std;
typedef struct LNODE{
int data;
struct LNODE *link;
}LNODE,*linklist;

void jos(int n,int k,int m)//n为总人数,k为第一个报数的人,m为出列者喊到的数
{
linklist p,r,list,curr;

p=(linklist)malloc(sizeof(LNODE));
p->data=0;
p->link=p;
curr=p;
for(int i=1;i<n;i++)
{
linklist t=(linklist)malloc(sizeof(LNODE));
t->data=i;
t->link=curr->link;
curr->link=t;
curr=curr->link;
//cout<<t->data;
}
//r=curr;
r=p;
//cout<<r->data<<endl;

while((k--)!=1) {r=p;p=p->link;
//cout<<p->data<<endl;
};

//cout<<p->data<<endl;
while(n--){
//for(int s=m-1;s--;r=p,p=p->link);
int s=m-1;
while(s!=0){
s--;
r=p;
p=p->link;
}

r->link=p->link;
cout<<p->data<<"->";
free(p);
p=r->link;
}
}
main()
{
int a,b,c;
cout<<"the number of people is"<<endl;
cin>>a;
cout<<"the first man is "<<endl;
cin>>b;
cout<<"the num of k is"<<endl;
cin>>c;
jos(a,b,c);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: