# -*- coding: utf-8 -*-
'''created on 2023年8月8日
@author: administrator
用python實現迴圈鍊錶,解決約瑟夫問題
'''class
person
():def
__init__
(self,num,next = none):
self.next = next
self.num = num
defcreate_cyclelink
(n):
'''引數n:為人數 '''
cur = person('cur') #建立鍊錶游標,
tmp = none
#用於存放最後乙個節點
if n == 1:
p = person(1)
cur.next = p
p.next = cur.next
return cur
for i in range(n):
if i == 0:
p = person(i+1)
cur.next = p
tmp = p
elif i < n -1:
p = person(i+1)
tmp.next = p
tmp = tmp.next
elif i == n-1:
p = person(i+1)
tmp.next = p
tmp = tmp.next
tmp.next = cur.next #將最後乙個人的指標指向第乙個人
return cur
#p = create_cyclelink(10)
#print(p.num)
#while p.next:
# print(p.next.num)
# p = p.next
out = none
defjohnson
(n,k):
''' n為人數
k:數到為k的人出列
'''
cur = create_cyclelink(n)
#print(cur.next.num)
out = none
print('出隊順序:')
for i in range(n-1):
for _ in range(k-1):
cur = cur.next
out = cur.next
print(out.num)
cur.next = out.next
print('最後出隊:',cur.next.num)
johnson(10, 2)
列印結果:
出隊順序:
2 4
6 8
10 3
7 1
9 最後出隊: 5
總結:解決約瑟夫問題,是迴圈鍊錶資料結構的經典應用,迴圈鍊錶是在順序鍊錶的基礎上,讓最後乙個節點指標指向第乙個節點
python解決約瑟夫問題
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...
python解決約瑟夫環問題
問題描述 編號為 1 n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數 1,2,3 這樣依次報 數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。有用遞迴函式 f n,m 的返回結果是存活士兵的編號,推導出old 與 new...
用C 解決約瑟夫環的問題
猶太歷史學家弗拉维奧 約瑟夫在他的日記中提到過這麼乙個問題 他和他的40個戰友被羅馬軍隊包圍在洞中。它們討論是自殺還是投降,最終決定採用抽籤的方式決定自殺的順序。演算法是這樣的 所有人站成一圈,依次報數從1到3,每報到3的則自殺,下乙個再從1開始報數。這樣,所有人會依次自殺,直到最後乙個。那最後乙個...