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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
PHP中最容易忘记的一些知识点总结
Apr 28 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
ucenter通信原理分析
Jan 09 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
Laravel中获取IP的真实地理位置
Apr 01 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
VFP与其他应用程序的集成
2006/10/09 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
实例说明Python中比较运算符的使用
2015/05/13 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
Python3中的bytes和str类型详解
2019/05/02 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
项目资料员岗位职责
2013/12/10 职场文书
音乐器材管理制度
2014/01/31 职场文书
校园运动会广播稿
2014/10/06 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
python脚本框架webpy模板赋值实现
2021/11/20 Python
MySQL插入数据与查询数据
2022/03/25 MySQL
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技