双链表解决Josephus问题
来源:互联网 发布:碧然德滤水壶 asa 知乎 编辑:程序博客网 时间:2024/06/06 16:44
Josephus问题是下面的这个游戏:
有N个人坐成一圈,编号为1至N。从编号为1的人开始传递热马铃薯。M次传递之后,持有热马铃薯的人退出游戏,圈缩小,然后游戏从退出人的下面的人开始,继续进行。最终留下来的人获胜。这样,如果M=0并且N=5,那么参加游戏的人依次退出,5号获胜。如果M=1并且N=5,那么退出的顺序就是2,4,1,5。
#include <iostream>using namespace std;struct Node{ int data; Node *next; Node *pre; Node ( int d = 0, Node *n = NULL, Node *p = NULL ) : data ( d ), next ( n ), pre ( p ) {}} ;class Jose{public: Jose() { init(); } ~Jose() { delete head; delete tail; } int size() const { return theSize; } void print() const { Node *h = head; while ( h->next != tail ) { h = h->next; cout << h->data << " "; } cout << endl; } void push ( int x ) { Node *n = new Node; n->data = x; n->next = head->next; head->next->pre = n; head->next = n; n->pre = head; theSize++; } void creat ( int Size ) { for ( int i = Size; i > 0; i-- ) push ( i ); } Node * pop ( Node *n ) { Node *h = n->next; h->pre = n->pre; n->pre->next = h; delete n; theSize--; //出局,人数减1 if ( h == tail ) h = head->next; return h; } void josephus ( int Size, int M ) { creat ( Size ); Node *h = head->next; int n; while ( theSize > 1 ) { n = M; while ( n-- ) { if ( h->next == tail ) h = head; h = h->next; } cout<<h->data<<" ";//输出出局的人 h = pop ( h ); //print(); } cout << head->next->data << endl;//输出最后的数 }private: int theSize; Node *head; Node *tail; void init() { theSize = 0; head = new Node; tail = new Node; head->next = tail; tail->pre = head; }};int main(){ Jose J ; J.josephus ( 20, 4 ); return 0;}
0 0
- 双链表解决Josephus问题
- 不使用链表解决Josephus问题
- 循环链表解决Josephus环问题
- josephus链表解决
- 循环链表解josephus问题
- 双向循环链表解决Josephus(约瑟夫)问题
- 约瑟夫问题(Josephus)java链表解决
- 利用数组模拟的链表解决Josephus问题
- 用链表解决约瑟夫(Josephus)问题
- 循环链表解决Josephus环轮流报数问题
- <C>Josephus问题——用循环链表解决
- 循环链表解决JOSEPHUS环问题[C语言实现]
- C语言通过双向循环链表解决Josephus(约瑟夫)问题
- 用顺序表解决josephus问题的算法
- 用带头结点的循环单链表解决Josephus问题(默认点名位置为1)
- 约瑟夫问题(Josephus问题)的递推O(n)解法、循环解法、单循环链表解法
- 链表解决约瑟夫问题
- 链表应用:Josephus问题
- 最短加法链问题,POJ2248,BFS,搜索
- 黑马程序员--Java基础之面向对象(上)
- JS 简单的轮播特效示例
- ActivityGroup
- Java命令行编译和运行的错误解决--classpath
- 双链表解决Josephus问题
- 用java实现简单的连连看小游戏~~
- Sort List
- Git忽略文件
- 兼容placeholder
- 在vs2012中使用sprintf等函数方法
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 规范化的的天然让他替她
- POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]