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 相关文章推荐
php简单静态页生成过程
Mar 27 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
PHP SOCKET编程详解
May 22 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
php解析base64数据生成图片的方法
Dec 06 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP ajax 分页类代码
2008/11/13 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
php 多文件上传的实现实例
2016/10/23 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
限制文本字节数js代码
2007/03/06 Javascript
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
微信小程序分页加载的实例代码
2017/07/11 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Python基础入门之seed()方法的使用
2015/05/15 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
七一表彰活动方案
2014/01/18 职场文书
小学生运动会报道稿
2014/09/12 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
使用springMVC所需要的pom配置
2021/09/15 Java/Android