Josephus问题

发布时间:2017-3-26 15:22:04 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Josephus问题",主要涉及到Josephus问题方面的内容,对于Josephus问题感兴趣的同学可以参考一下。

int josephus( int ring_num, int pass_num ) { int i; node *first, *previous; node *next_node; node *who_has_token; first =( node * )malloc( sizeof( node ) ); assert( first != NULL ); first->next = NULL; first->value = 1; first->coef = TOKEN; previous = first; for( i = 2; i <= ring_num; i++ ){ next_node = ( node * )malloc( sizeof( node ) ); assert( next_node != NULL ); next_node->coef = 0; next_node->value = i; next_node->next = NULL; previous->next = next_node; previous = next_node; } /*闭合环*/ next_node->next = first; who_has_token = first; previous = next_node; /*对pass_num取余,这样就不会有多于一圈的传递,对于M很多的可以节省很多时间*/ pass_num = pass_num % ring_num; while( who_has_token->next != who_has_token ){ node *temp; /* 传递pass_num次*/ for( i = 0; i < pass_num; i++ ){ who_has_token->next->coef = TOKEN; who_has_token->coef = 0; previous = who_has_token; who_has_token = who_has_token->next; } /*删除拥有TOKEN的节点*/ temp = who_has_token; /*显示节点删除的顺序*/ printf( "%4d", who_has_token->value ); previous->next = who_has_token->next; who_has_token = who_has_token->next; who_has_token->coef = TOKEN; free( temp ); } return who_has_token->value; } TOKEN其实没有必要,只要有who_has_token指针就行了

上一篇:android wifi ralink rt3070开发记录
下一篇:UVAlive5792 Diccionário Portuñol

相关文章

关键词: Josephus问题

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款