php 环问题,php基于环形链表解决约瑟夫环问题示例

本文实例讲述了php基于环形链表解决约瑟夫环问题。分享给大家供大家参考,具体如下:

先来重温一下约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。

前面介绍了关联数组解决约瑟夫环的方法,环形链表解决约瑟夫环的方法如下:

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

$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 "
人的编号:".$cur->no;

$cur=$cur->next;

}

echo "
人的编号:".$cur->no;

}

function countChild($first,$m,$k){

$cur=$first;

for($i=0;$i

$cur=$cur->next;

}

$j=0;

while($cur!=$cur->next){

if($j==$k-2){

echo "
出列编号:".$cur->next->no;

$cur->next=$cur->next->next;

$cur=$cur->next;

$j=0;

}else{

$cur=$cur->next;

$j++;

}

}

echo "
最后出列编号:".$cur->no;

}

addChild(10,$first);

showHero($first);

echo "


";

countChild($first,2,3); //第二个人开始数,数到三出列

?>

运行结果:

人的编号:1

人的编号:2

人的编号:3

人的编号:4

人的编号:5

人的编号:6

人的编号:7

人的编号:8

人的编号:9

人的编号:10

--------------------------------------------------------------------------------

出列编号:4

出列编号:7

出列编号:10

出列编号:3

出列编号:8

出列编号:2

出列编号:9

出列编号:6

出列编号:1

最后出列编号:5

希望本文所述对大家PHP程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值