約瑟夫問題 迴圈鍊錶簡單解決

2021-10-05 20:42:45 字數 1004 閱讀 1044

約瑟夫求生最初版本:

在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從。首先從乙個人開始,越過k-2個人(因為第乙個人已經被越過),並殺掉第k個人。接著,再越過k-1個人,並殺掉第k個人。這個過程沿著圓圈一直進行,直到最終只剩下乙個人留下,這個人就可以繼續活著。問題是,給定了和,一開始要站在什麼地方才能避免被處決?josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲

就借助最初版本複習一下迴圈鍊錶吧

人與人之間手拉手形成環,每個人就是乙個鍊錶結點,結點的刪除就是這個人狗帶

#include

#include

#include

using

namespace std;

struct person

;void

kill

(person *p)

intmain()

else

} person *t = head;

//遍歷鍊錶的結點

cout <<

"狗帶順序為:"

;for

(int i =

1; sum >= flag; i++

)else

} cout << endl;

if(sum >0)

while

(t != first);}

else

return0;

}

懶得結點乙個個delete了,交給系統吧

迴圈鍊錶實現解決約瑟夫問題

typedef struct tag circlelist 頭節點 tcirclelist circlelist circlelist creat memset ret,0,sizeof tcirclelist ret header.next null ret slider null ret len...

迴圈鍊錶 約瑟夫問題

設編號分別為 1,2,n的n個人圍坐一圈。約定序號為k 1 k n 的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。演算法思路 1 先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。2 找到第k個結點,即第乙個開始報數的人...

(迴圈鍊錶)約瑟夫問題

time limit 1000 ms memory limit 65536 kib submit statistic n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的...