資料結構之josephus 問題

2021-09-09 09:18:18 字數 1487 閱讀 3433

講的就是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 ...