最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實現(xiàn)的基于單向鏈表解決約瑟夫環(huán)問題示例

 更新時間:2017年09月30日 16:50:22   作者:CyborgLin  
這篇文章主要介紹了PHP實現(xiàn)的基于單向鏈表解決約瑟夫環(huán)問題,結(jié)合具體實例形式分析了php使用單鏈表解決約瑟夫環(huán)問題的算法原理與相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了PHP實現(xiàn)的基于單向鏈表解決約瑟夫環(huán)問題。分享給大家供大家參考,具體如下:

約瑟夫環(huán)問題:在羅馬人占領(lǐng)喬塔帕特后,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧愿死也不要被敵人抓到,于是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數(shù),每報數(shù)到第3人該人就必須自殺,然后再由下一個重新報數(shù),直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從。首先從一個人開始,越過k-2個人(因為第一個人已經(jīng)被越過),并殺掉第k個人。接著,再越過k-1個人,并殺掉第k個人。這個過程沿著圓圈一直進行,直到最終只剩下一個人留下,這個人就可以繼續(xù)活著。問題是,給定了和,一開始要站在什么地方才能避免被處決?Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,于是逃過了這場死亡游戲。

更多的類似問題是:n個人圍成圈,依次編號為1,2,..,n,現(xiàn)在從1號開始依次報數(shù),當(dāng)報到m時,報m的人退出,下一個人重新從1報起,循環(huán)下去,問最后剩下那個人的編號是多少?

代碼實現(xiàn):

<?php
class Node{
  public $value;   // 節(jié)點值
  public $nextNode;  // 下一個節(jié)點
}
function create($node, $value){
  $node->value = $value;
}
function addNode($node, $value){
  $lastNode = findLastNode($node);
  $nextNode = new Node();
  $nextNode->value = $value;
  $lastNode->nextNode = $nextNode;
}
/* 找到最后的節(jié)點 */
function findLastNode($node){
  if(empty($node->nextNode)){
    return $node;
  }else{
    return findLastNode($node->nextNode);
  }
}
/* 刪除節(jié)點 必須head為引用傳值 */
function deleteNode(&$head, $node, $m, $k = 1){
  if($k + 1 == $m){
    if($node->nextNode == $head){
      $node->nextNode = $node->nextNode->nextNode;
      $head = $node->nextNode;
      return $node->nextNode;
    }else{
      $node->nextNode = $node->nextNode->nextNode;
      return $node->nextNode;
    }
  }else{
    return deleteNode($head, $node->nextNode, $m, ++$k);
  }
}
/* 節(jié)點數(shù) */
function countNode($head, $node, $count = 1){
  if($node->nextNode == $head){
    return $count;
  }else{
    return countNode($head, $node->nextNode, ++$count);
  }
}
function printNode($head, $node){
  echo $node->value . ' ';
  if($node->nextNode == $head) return;
  printNode($head, $node->nextNode);
}
function show($data){
  echo '<pre>';
  print_r($data);
  echo '</pre>';
}
$head = new Node();
create($head, 1);
addNode($head, 2);
addNode($head, 3);
addNode($head, 4);
addNode($head, 5);
addNode($head, 6);
addNode($head, 7);
addNode($head, 8);
addNode($head, 9);
addNode($head, 10);
addNode($head, 11);
addNode($head, 12);
$lastNode = findLastNode($head);
$lastNode->nextNode = $head;
$count = countNode($head, $head);
$tmpHead = $head;
while ($count > 2) {
  $tmpHead = deleteNode($head, $tmpHead, 3, 1);
  $count = countNode($head, $head);
}
printNode($head, $head);

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《PHP基本語法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》及《php程序設(shè)計算法總結(jié)

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • PHP實現(xiàn)的函數(shù)重載功能示例

    PHP實現(xiàn)的函數(shù)重載功能示例

    這篇文章主要介紹了PHP實現(xiàn)的函數(shù)重載功能,結(jié)合實例形式分析了php面向?qū)ο蟪绦蛟O(shè)計中使用__call方法的重載及構(gòu)造函數(shù)重載相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • PHP循環(huán)與分支知識點梳理

    PHP循環(huán)與分支知識點梳理

    涉及到一些比較復(fù)雜的邏輯,分支與循環(huán)是必不可少的。通過分支和循環(huán)的結(jié)合使用可以使業(yè)務(wù)更加復(fù)雜,代碼功能更加強大,這篇文章主要介紹了PHP循環(huán)與分支知識點
    2022-11-11
  • PHP中的閉包function()?use()?{}使用場景和技巧

    PHP中的閉包function()?use()?{}使用場景和技巧

    由于存在函數(shù)內(nèi)部不能訪問全局作用的,所以就需要一種可以引入上一級作用域的語法結(jié)構(gòu),可以通過use使用函數(shù)聲明時所在作用域的變量的值。php的閉包可能不常用,但是在某些場合之下還是可以考慮用php的閉包來實現(xiàn)某些功能的。
    2022-12-12
  • php獲取通過http協(xié)議post提交過來xml數(shù)據(jù)及解析xml

    php獲取通過http協(xié)議post提交過來xml數(shù)據(jù)及解析xml

    php 如何獲取請求的xml數(shù)據(jù),對方通過http協(xié)議post提交過來xml數(shù)據(jù),php如何獲取到這些數(shù)據(jù)呢?
    2012-12-12
  • php array_slice函數(shù)的使用以及參數(shù)詳解

    php array_slice函數(shù)的使用以及參數(shù)詳解

    array array_slice ( array array, int offset [, int length]),根據(jù) offset 和 length 參數(shù)所指定的 array 數(shù)組中的一段序列。offset 表示開始位置,length表示這段序列的長度.
    2008-08-08
  • php隨機抽獎實例分析

    php隨機抽獎實例分析

    這篇文章主要介紹了php隨機抽獎實現(xiàn)方法,實例分析了php抽獎類lottery_tool及其具體使用技巧,需要的朋友可以參考下
    2015-03-03
  • php抽獎小程序的實現(xiàn)代碼

    php抽獎小程序的實現(xiàn)代碼

    本篇文章是對php實現(xiàn)抽獎的程序代碼進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP標準類(stdclass)用法示例

    PHP標準類(stdclass)用法示例

    這篇文章主要介紹了PHP標準類(stdclass)用法,結(jié)合實例形式分析了php內(nèi)置標準類的原理與使用方法,需要的朋友可以參考下
    2016-09-09
  • 從wamp到xampp的升級之路

    從wamp到xampp的升級之路

    這篇文章主要介紹了從wamp到xampp的升級之路的相關(guān)資料,十分的詳細,需要的朋友可以參考下
    2015-04-04
  • Discuz 6.0+ 批量注冊用戶名

    Discuz 6.0+ 批量注冊用戶名

    Discuz 6.0+ 批量注冊用戶名 此方法適合于手動采集用戶名,自動注冊用戶名,這樣做的好處是比較逼真!
    2009-09-09

最新評論

普兰县| 黎川县| 凌源市| 石家庄市| 江源县| 微博| 汕尾市| 达日县| 遵义市| 唐山市| 于都县| 和田县| 甘南县| 柘荣县| 北安市| 长泰县| 普兰店市| 土默特右旗| 陵水| 甘孜| 城固县| 昌宁县| 镇远县| 稻城县| 宜都市| 山东省| 铜陵市| 阜城县| 株洲市| 鄂州市| 固原市| 永善县| 嵊州市| 宁南县| 巍山| 烟台市| 海盐县| 高州市| 房产| 肥东县| 常州市|