講的就是n個人構成乙個表,從第k個人開始計數,第m個人退出,並輸出其編號,迴圈執行,直到表為空。注意:計數到表尾時,則從表頭繼續計數。
#基於list的方法
def josephus_a(n,k,m):
people = list(range(1,n+1))
i = k-1
for num in range(n):
count = 0
while count < m:
if people[i] > 0:
count +=1
if count == m:
print(people[i],end='')
people[i] = 0
i = (i + 1) % n #i是迴圈索引
if num < n -1:
print(', ',end = '')
else:
print(' ')
return
#基於順序表的方法,每退出乙個人就刪除乙個元素;這裡由於有刪除退出人編號的位置
#因此,計數編號和索引編號可以統一
def josephus_b(n,k,m):
people = list(range(1,n+1))
num,i = n,k-1
for num in range(n,0,-1):
i = (i + m -1) % num #既是索引,也是要退出的人員的編號
print(people.pop(i),end = (', ' if num > 1 else '\n')) #刪除列表中的對應元素
return
#基於迴圈表的方法
class josephus_c(clist):
def turn(self,m):
for i in range(m):
self.rear_ = self.rear_.next_
def __init__(self,n,k,m):
#構建迴圈鍊錶
clist.__init__(self)
for i in range(1,n+1):
#儲存開始計數字置k和第幾個人退出m
self.start = k
self.increment = m
def compute(self):
self.turn(self.start-1)
while not self.is_empty():
self.turn(self.increment-1)
print(self.delete_first(),end = '\n' if self.is_empty() else ', ')
#測試
josephus_a(10,2,7)
josephus_b(10,2,7)
s =josephus_c(10,2,7)
s.compute()
資料結構之迷宮問題
求迷宮問題就是求出從入口到出口的路徑。在求解時,通常用的是 窮舉求解 的方法,即從入口出發,順某一方向向前試探,若能走通,則繼續往前走 否則沿原路退回,換乙個方向再繼續 試探,直至所有可能的通路都試探完為止。為了保證在任何位置上都能沿原路退回 稱為回溯 需要用乙個後進先出的棧來儲存從入口到當前位置的...
資料結構之迷宮問題
迷宮結構如下 定義三個結構體,define size 100 對該迷宮,100個夠用了 define add size 10 每次要增加的大小 define endflag null 出錯時返回的標誌 define row 8 迷宮的行的大小,對應i define col 8 迷宮的列的大小,對應j...
資料結構 之迷宮問題
所謂迷宮,就是在乙個矩陣中,從開始位置有一條通路可以走到最末尾的位置 先畫乙個迷宮,格式為txt,和編譯的資料夾放在一起 在迷宮中,0表示可以走通的路,而1則表示不可走通的牆 首先定義乙個結構體,用來存放行和列 struct pos 接下來從檔案中獲得迷宮 的矩陣 void getmaze int ...