本文实例讲述了php基于环形链表解决约瑟夫环问题。分享给大家供大家参考,具体如下:
先来重温一下约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
前面介绍了关联数组解决约瑟夫环的方法,环形链表解决约瑟夫环的方法如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<?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
11
12
13
14
15
16
17
18
19
20
21
22
|
人的编号:1
人的编号:2
人的编号:3
人的编号:4
人的编号:5
人的编号:6
人的编号:7
人的编号:8
人的编号:9
人的编号:10
--------------------------------------------------------------------------------
出列编号:4
出列编号:7
出列编号:10
出列编号:3
出列编号:8
出列编号:2
出列编号:9
出列编号:6
出列编号:1
最后出列编号:5
|
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://www.oschina.net/code/snippet_723831_15617
相关文章
猜你喜欢
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
iOS 11更新后及iPhone X推出后工程中遇到的问题及适配方法
2025-05-29 84 -
2025-05-27 83
-
2025-05-27 41
-
2025-05-29 15
-
2025-05-27 61
热门评论