php使用環形鍊錶解決約瑟夫問題完整示例

2022-10-06 15:36:21 字數 2232 閱讀 7272

約瑟夫問題:

josephu問題為:設編號為1,2,...n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。並求出最後出列的人是哪個?

php實現環形鍊錶以及約瑟夫問題的解決:

/*** 鍊錶結構

*/class child

}/**

* 鍊錶操作

*/class cyclelink

$currentnode->next = $node;

$currentnode->next->next = $head;

$this->nodenum++;

} /**

* 刪除節點

*/public function delnode($head,$no)

$currentnode = $currentnode->next;

}} /**

* 獲取節點數量

*/public function getnodenum()

/*** 查詢節點

*/public function findnode($head,$no)

$currentnode = $currentnode->next;

}return $node;

} public function getnextnode($head,$node)

return $node->next;

} /**

* 顯示節點

*/public function shownode($head)

}}/*

//建立乙個head頭,該head 只是乙個頭,不放入資料

$head = new child();

$childlist = new cyclelink();

$child_1 = new child(1);

$child_2 = new child(2);

$child_3 = new child(3);

$child_4 = new child(4);

$childlist->addnode($head,$child_1);

$childlist->addnode($head,$child_2);

$childlist->addnode($head,$child_3);

$childlist->addnode($head,$child_4);

$childlist->shownode($head);

echo "";

var_dump($head);

$findnode = $childlist->程式設計客棧findnode($head,3);

echo "";

var_dump($findnode);

$childlist->delnode($head,2);

$childlist->shownode($head);

echo $childlist->getnodenum();

exit();

*//**

* 約瑟夫問題

* 設編號為1,2,...n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m的那個人出列,

* 它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。

* 並求出最後出列的人是哪個?

*/class josephu 個小孩,從第 個小孩開始報數,數到 退出

"; }

// 數數

public function exec()

// 移動到下乙個小孩

$currentnode = $nextnode;

}echo '

最後乙個小孩編號:' . $currentnode->no;

} // 建立小孩

private function createl程式設計客棧ist($n)

$this->childlist->shownode($this->head);

}}$josephu = new josephu(4, 1, 2);

$josephu->exec();

執行結果:

第 1 名小孩

第 2 名小孩

第 3 名小孩

第 4 名小孩

當前有 4 個小孩,從第 1 個小孩開始報數,數到 2 退出

環形鍊錶解決約瑟夫問題

使用for來建立我們的環形鍊錶 boy curboy null 輔助指標。幫助構建環形鍊錶 for迴圈建立環形鍊錶 for int i 1 i nums i else 遍歷當前的環形鍊錶 public void showboy 因為first不能動,因此我們任然使用乙個輔助指標來完成 boy cur...

單向環形鍊錶解決約瑟夫問題

package com.xkp.data.linkerlist author xkp version 1.0 classname josepfu description 單向環形煉表處理約瑟夫問題 date 2020 11 30 0030 23 12 public class josepfu cla...

環形鍊錶解決約瑟夫問題 小孩出圈

public class josepfu 建立乙個單向的環形鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標 for int i 1 i nums i else 遍歷當前迴圈鍊錶 public void showboy 因為first不動,我們...