龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

约瑟夫环问题(环形链表)

时间:2014-07-22 14:50来源: 作者: 点击:
分享到:
php算法
php算法
<?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); //第二个小孩开始数,数到三出列

?>
精彩图集

赞助商链接