本文實例講述了php基于環形鏈表解決約瑟夫環問題。分享給大家供大家參考,具體如下:
先來重溫一下約瑟夫環問題:N個人圍成一圈,從第一個開始報數,第M個將被殺掉,最后剩下一個,其余人都將被殺掉。例如N=6,M=5,被殺掉的順序是:5,4,6,2,3,1。
前面介紹了關聯數組解決約瑟夫環的方法,環形鏈表解決約瑟夫環的方法如下:
<?phpheader("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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選