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


Posted in PHP onNovember 07, 2017

本文实例讲述了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

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

PHP 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP新手入门学习方法
May 08 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
yii2 上传图片的示例代码
Nov 02 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 #PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 #PHP
php实现的三个常用加密解密功能函数示例
Nov 06 #PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 #PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 #PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 #PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 #PHP
You might like
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
竞职演讲稿范文
2014/01/11 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
企业文明单位申报材料
2014/05/16 职场文书
工程造价专业求职信
2014/07/17 职场文书
授权委托书
2014/07/31 职场文书
天下第一关导游词
2015/02/06 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript