永发信息网

采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,

答案:1  悬赏:20  手机版
解决时间 2021-02-07 07:14
采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,
这个人就离开.请输出所有人的离队顺序.
最佳答案


#include
using namespace std;
// 表示一个犯人的结构体
struct Prisoner
{
// 编号
int id;
// 密码
int pass;
// 用于链表的指针
struct Prisoner * pre;
struct Prisoner * next;
};
class JosephCircle
{
public:
// 基本的约瑟夫构造函数
JosephCircle(int N,int M,int R);
// 输出约瑟夫环
void print();
// 开始处决犯人
void start();
private:
int N,M,R;
// 约瑟夫环的头指针
struct Prisoner * head;
// 第一个被处决的犯人的节点指针
struct Prisoner * firstPunishedPrision;
};
JosephCircle::JosephCircle(int N,int M,int R)
{
this->N = N;
this->M = M;
this->R = R;

struct Prisoner * p , *pr;
// 约瑟夫环的头指针初始化为空
this->head = NULL;
// 构造一个由 N 个犯人组成的约瑟夫环
for(int i=1;ihead == NULL)
{
// 新增一个犯人
p = new struct Prisoner();
// 犯人编号
p -> id = i;
// 犯人密码
p -> pass = R;
// 紧挨着的下一个犯人(因为是环状的,每个人都会有紧挨着的其他犯人)
p -> pre = p;
p -> next = p;
// 约瑟夫环的头指针
this->head = pr = p;
}
else
{
p = new struct Prisoner();
p -> id = i;
p -> pass = R;
p -> pre = pr;
p -> next = pr->next;

pr -> next -> pre = p;
pr -> next = p;

pr = p;
}
}

// 寻找约瑟夫环里面第一个被处决的犯人的【节点指针】
firstPunishedPrision = head;
for(int i=2;ifirstPunishedPrision = this->firstPunishedPrision -> next;
}
}
// 输出约瑟夫环
void JosephCircle::print()
{
cout pre = q -> pre;
p = p -> next;
// 输出被处决的犯人的信息
cout


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
咸潮是指沿海地区海水通过河流或其他渠道倒流
英雄无敌三 第二次世界大战攻略 哪里学时空之
母子情深婴幼儿游泳馆这个地址在什么地方,我
辰昇咖啡地址有知道的么?有点事想过去
解同角三角函数的题已知tanα=-3﹨4(负四分
新粮小区在哪里啊,我有事要去这个地方
真三国无双5樊城之战地图怎样刷出来
薇薇烘焙千层蛋糕地址在哪,我要去那里办事
OPPOa33系统更新后就是root了吗?会有什么不
甲乙两数的和是564,甲数增加25,乙数减少5,甲
荷鳅塘徽派火锅地址在哪,我要去那里办事
周易八卦起名打分
底霜什么牌子的好用
正东茶行地址在哪,我要去那里办事
三国杀里最没用的正面武将技能?
推荐资讯
拄着竹杖的拼音快快快
谁能教教我怎样用半天时间做完一本预习笔记和
土地财政是什么
如何培养中学生的逻辑思维能力
苏堤路/西湖道(路口)地址有知道的么?有点事
望江县杨林初级中学地址在什么地方,想过去办
羊塔克库都克南服务区-加油站这个地址在什么
医务人员应该尊重、同情、关心、救助服务对象
上海浦东国际货运有限公司连云港分公司这个地
宝马x4和保时捷macan哪个好
七份子村怎么去啊,有知道地址的么
国外留学的有人找过代写的吗?有推荐吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?