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

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

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

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

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

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

代碼實(shí)現(xiàn):

<?php
class Node{
  public $value;   // 節(jié)點(diǎn)值
  public $nextNode;  // 下一個(gè)節(jié)點(diǎn)
}
function create($node, $value){
  $node->value = $value;
}
function addNode($node, $value){
  $lastNode = findLastNode($node);
  $nextNode = new Node();
  $nextNode->value = $value;
  $lastNode->nextNode = $nextNode;
}
/* 找到最后的節(jié)點(diǎn) */
function findLastNode($node){
  if(empty($node->nextNode)){
    return $node;
  }else{
    return findLastNode($node->nextNode);
  }
}
/* 刪除節(jié)點(diǎn) 必須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é)點(diǎn)數(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è)計(jì)入門教程》、《php字符串(string)用法總結(jié)》及《php程序設(shè)計(jì)算法總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

    php 如何獲取請(qǐng)求的xml數(shù)據(jù),對(duì)方通過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表示這段序列的長(zhǎng)度.
    2008-08-08
  • php隨機(jī)抽獎(jiǎng)實(shí)例分析

    php隨機(jī)抽獎(jiǎng)實(shí)例分析

    這篇文章主要介紹了php隨機(jī)抽獎(jiǎng)實(shí)現(xiàn)方法,實(shí)例分析了php抽獎(jiǎng)?lì)恖ottery_tool及其具體使用技巧,需要的朋友可以參考下
    2015-03-03
  • php抽獎(jiǎng)小程序的實(shí)現(xiàn)代碼

    php抽獎(jiǎng)小程序的實(shí)現(xiàn)代碼

    本篇文章是對(duì)php實(shí)現(xiàn)抽獎(jiǎng)的程序代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP標(biāo)準(zhǔn)類(stdclass)用法示例

    PHP標(biāo)準(zhǔn)類(stdclass)用法示例

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

    從wamp到xampp的升級(jí)之路

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

    Discuz 6.0+ 批量注冊(cè)用戶名

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

最新評(píng)論

随州市| 自贡市| 南召县| 枣阳市| 泸州市| 犍为县| 潼南县| 行唐县| 隆安县| 霍邱县| 九寨沟县| 白河县| 华阴市| 化州市| 弋阳县| 阜新市| 淮安市| 城固县| 随州市| 航空| 宜川县| 麻栗坡县| 金塔县| 德化县| 纳雍县| 瓦房店市| 晴隆县| 秦皇岛市| 浦县| 横峰县| 修文县| 谢通门县| 河北区| 遂昌县| 崇义县| 广宁县| 巴青县| 漳州市| 昌平区| 郁南县| 建水县|