以單向迴圈鍊錶求解約瑟夫環問題Java版

2021-08-30 07:01:45 字數 1523 閱讀 1639

約瑟夫環(josephus)問題:古代某法官要判決n個犯人的死刑,他有一條荒唐的法律,將犯人站成乙個圓圈,從第s個人開始數起,每數到第d個犯人,就拉出來處決,然後再數d個,數到的人再處決……直到剩下的最後乙個可赦免.

結點類:onelinknode:

package com;

/** * 結點類

* @author zdw

* */

public class onelinknode

public onelinknode()

}

鍊錶類onelink:

package com;

public class onelink

//只有乙個結點的單向鍊錶

public onelink(onelinknode h1)

//判斷鍊錶是否為空

public boolean isempty()

//用隨機數構造n個數的鍊錶

public onelink(int n)}}

}

josephus類:

package com;

public class josephus2 extends onelink

josephus2(int n) // 建立n個結點的單向迴圈鍊錶}}

//計數起點s,d要跳過的個數

public void display(int s, int d) // 解約瑟夫環

while (p.next != p) // 多於乙個結點時迴圈

delete(p); // 刪除p的後繼結點

p = p.next;

this.output();}}

public void delete(onelinknode p) // 刪除p的後繼結點

public void output() // 輸出單向鍊錶的各個結點值

while (p != head);

system.out.println();

}//測試

public static void main(string args)

}

測試輸出結果沒有任何問題:

com.josephus2:  1 -> 2 -> 3 -> 4 -> 5 -> 

delete: 4 com.josephus2: 1 -> 2 -> 3 -> 5 ->

delete: 2 com.josephus2: 1 -> 3 -> 5 ->

delete: 1 com.josephus2: 3 -> 5 ->

delete: 3 com.josephus2: 5 ->

其實這個題沒多難,但是要是在面試的時候問你,現想就來不及了……

用迴圈鍊錶求解約瑟夫環問題

約瑟夫環問題 已知 n 個人 n 1 圍坐一圓桌周圍,從 1 開始順序編號,從序號為 1 的人開始報數,順時針數到 m 的那個人出列。下乙個人又從 1 開始報數,數到m 的那個人又出列。依此規則重複下去,直到所有人全部出列。請問最後乙個出列的人的初始編號。輸入輸出 輸入人數 n,所報數 m,輸出最後...

利用迴圈鍊錶求解約瑟夫問題

這題其實就是約瑟夫問題換了個 皮。用迴圈鍊錶解決的話思路最清晰,如下,注意看注釋的解釋。using system.collections.generic class circlenode 建立迴圈鍊錶節點 class solution temp.next head 迴圈結束,所有節點已經插入,則讓t...

資料結構 迴圈鍊錶求解約瑟夫環問題

開啟部落格,竟然有兩個多月沒更新部落格了。最近一直在忙著準備實習招聘,所以沒有學習什麼android的新的東西,而是在學習招聘中最被重視之一的資料結構與演算法,而自己又非科班出身,哎.也許沒那麼難,加油!另外,對於這個部落格,我是想專門寫一些安卓的知識方便自己回顧還有比我新手的來參考的,就像我收藏的...