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 24 PHP
PHP基础知识介绍
Sep 17 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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程序的方法
2009/03/09 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
日语专业推荐信
2013/11/12 职场文书
2013英文求职信模板范文
2013/11/15 职场文书
会计自荐书
2013/12/02 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
生日宴会主持词
2014/03/20 职场文书
效能监察建议书
2014/05/19 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
助理政工师申报材料
2014/06/03 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
生日答谢词
2015/01/05 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL