php基于环形链表解决约瑟夫环问题示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-18 11:42:42 浏览: 评论:0
这篇文章主要介绍了php基于环形链表解决约瑟夫环问题,结合具体实例形式分析了php环形链表的定义及基于环形链表解决约瑟夫环的具体步骤与相关操作技巧,需要的朋友可以参考下。
本文实例讲述了php基于环形链表解决约瑟夫环问题,分享给大家供大家参考,具体如下:
先来重温一下约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
前面介绍了关联数组解决约瑟夫环的方法,环形链表解决约瑟夫环的方法如下:
- <?php
- header("content-type:text/html;charset=utf-8");
- class Child{
- public $no;
- public $next=null;
- public function __construct($no){
- $this->no=$no;
- }
- }
- function addChild($n,&$first){ //$n是人的个数,创建环形链表
- for($i=0;$i<$n;$i++){
- $child=new Child($i+1);
- if($i==0){
- $first=$child;
- $cur=$child;
- $cur->next=$cur;
- }else{
- $cur->next=$child;
- $child->next=$first;
- $cur=$cur->next;
- }
- }
- }
- function showHero($first){
- $cur=$first;
- while($cur->next!=$first){
- echo "<br/>人的编号:".$cur->no;
- $cur=$cur->next;
- }
- echo "<br/>人的编号:".$cur->no;
- }
- function countChild($first,$m,$k){
- $cur=$first;
- for($i=0;$i<$m-1;$i++){
- $cur=$cur->next;
- }
- $j=0;
- while($cur!=$cur->next){
- if($j==$k-2){
- echo "<br/>出列编号:".$cur->next->no;
- $cur->next=$cur->next->next;
- $cur=$cur->next;
- $j=0;
- }else{
- $cur=$cur->next;
- $j++;
- }
- }
- echo "<br/>最后出列编号:".$cur->no;
- }
- addChild(10,$first);
- showHero($first);
- echo "<hr/>";
- countChild($first,2,3); //第二个人开始数,数到三出列
- ?>
运行结果:
- 人的编号:1
- 人的编号:2
- 人的编号:3
- 人的编号:4
- 人的编号:5
- 人的编号:6
- 人的编号:7
- 人的编号:8
- 人的编号:9
- 人的编号:10
- --------------------------------------------------------------------------------
- 出列编号:4
- 出列编号:7
- 出列编号:10
- 出列编号:3
- 出列编号:8
- 出列编号:2
- 出列编号:9
- 出列编号:6
- 出列编号:1
- 最后出列编号:5
Tags: php环形链表 php约瑟夫环
相关文章
- ·php使用环形链表解决约瑟夫问题完整示例(2021-10-22)
- ·PHP实现的基于单向链表解决约瑟夫环问题示例(2021-08-11)
- ·PHP实现约瑟夫环问题的方法分析(2021-08-22)
- ·php解决约瑟夫环算法实例分析(2021-12-26)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)