鏈表運(yùn)用---約瑟夫問題(一)

約瑟夫問題又稱為“約瑟夫置換”或者“約瑟夫環(huán)”,是一個(gè)出現(xiàn)在計(jì)算機(jī)科學(xué)和數(shù)學(xué)中的問題
歷史背景:
版本一:這個(gè)問題是以[弗拉維奧·約瑟夫]命名的诊霹,他是1世紀(jì)的一名猶太歷史學(xué)家。他在自己的日記中寫道,他和他的40個(gè)戰(zhàn)友被羅馬軍隊(duì)包圍在洞中懂酱。他們討論是自殺還是被俘,最終決定自殺誊抛,并以抽簽的方式?jīng)Q定誰殺掉誰列牺。約瑟夫斯和另外一個(gè)人是最后兩個(gè)留下的人。約瑟夫斯說服了那個(gè)人拗窃,他們將向羅馬軍隊(duì)投降瞎领,不再自殺。約瑟夫斯把他的存活歸因于運(yùn)氣或天意随夸,他不知道是哪一個(gè)
版本二:Josephus有過的故事:39 個(gè)猶太人與Josephus及他的朋友躲到一個(gè)洞中九默,39個(gè)猶太人決定寧愿死也不要被敵人抓。于是決定了自殺方式宾毒,41個(gè)人排成一個(gè)圓圈驼修,由第1個(gè)人開始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺伍俘。然后下一個(gè)重新報(bào)數(shù)邪锌,直到所有人都自殺身亡為止。然而Josephus和他的朋友并不想遵從癌瘾,Josephus要他的朋友先假裝遵從觅丰,他將朋友與自己安排在第16個(gè)與第31個(gè)位置,于是逃過了這場死亡游戲
【ps:發(fā)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)&算法何其偉大妨退,關(guān)乎到生死存亡呀哈哈哈】
應(yīng)用問題轉(zhuǎn)化:
【N個(gè)人圍繞在一個(gè)圓桌子上玩報(bào)數(shù)游戲妇萄,報(bào)到N這個(gè)數(shù)字蜕企,淘汰,然后從下一個(gè)人繼續(xù)開始報(bào)數(shù)冠句,報(bào)到N淘汰轻掩,循環(huán)下去,最后剩余2個(gè)人懦底,也
可以循環(huán)唇牧,最終只會(huì)有一個(gè)人勝出】
言歸正傳:怎么使用循環(huán)鏈表來描述這個(gè)問題?可直接參考如下代碼

/*****************************************循環(huán)鏈表*******************************************/
void circularLinkedList(int M,int N){
    PersonListNode *head = (PersonListNode *)malloc(sizeof(PersonListNode));//定義一個(gè)頭結(jié)點(diǎn)
    head ->next = head;
    head ->num = 1;
    
    PersonListNode *temp = head;    //將頭結(jié)點(diǎn)復(fù)制給temp
    
    for (int i = 2; i<= N; i++) {//構(gòu)建循環(huán)鏈表聚唐,
        temp ->next = (PersonListNode *)malloc(sizeof(PersonListNode)); // 當(dāng)i=2時(shí)丐重,temp->next為開始結(jié)點(diǎn),也就是頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)
        temp = temp->next; // 當(dāng)i=2時(shí)杆查,將開始結(jié)點(diǎn)賦值給temp
        temp->num = i;
        temp->next = head; // 將當(dāng)前結(jié)點(diǎn)指向頭結(jié)點(diǎn)扮惦,循環(huán)結(jié)束時(shí),temp指向的是尾結(jié)點(diǎn)
    }
    while (temp != temp ->next) {//循環(huán)開始時(shí)亲桦,temp指向的是尾結(jié)點(diǎn)
        for (int j=1; j<M; j++) {
            temp =temp->next;//此時(shí)在M的間隔中間崖蜜,只需要完成結(jié)點(diǎn)替代、遍歷
        }
        //執(zhí)行完for時(shí)就說明此時(shí)j=M客峭,該俘虜需要自殺豫领,for循環(huán)執(zhí)行完,當(dāng)前temp的下一個(gè)人就是目標(biāo)俘虜
        PersonListNode *targetPersonNode = temp->next;
        cout<<"編號(hào)為"<<targetPersonNode->num<<"的俘虜自殺"<< endl;
        //此時(shí)需要將自殺俘虜之后俘虜與自殺俘虜之前的俘虜進(jìn)行關(guān)聯(lián)舔琅,此時(shí)的temp為自殺前一個(gè)俘虜?shù)慕Y(jié)點(diǎn)
        temp->next = temp->next->next;
        free(targetPersonNode);//將當(dāng)前自殺的俘虜移除氏堤,重新來過
    }
    cout<<"此時(shí)勝出俘虜編號(hào)為"<< temp->num<<endl;
}

int main()
{
    int M,N;//M 規(guī)則(隔M個(gè)數(shù)) N 人數(shù)(N個(gè)人)
    cout << "輸入俘虜人數(shù)N " <<endl;
    cin >> N;
    cout << "輸入規(guī)則M間隔數(shù)"<<endl;
    cin >> M;
    //單鏈表實(shí)現(xiàn)思路[目前有點(diǎn)問題,待完善]
//    singleLinkedList(M, N);
    //循環(huán)鏈表實(shí)現(xiàn)思路搏明。M為3 N為8 此時(shí)7號(hào)俘虜勝出
    circularLinkedList(M,N);
    
    return 0;
}

待完善【單鏈表解法、數(shù)組解法 及其對(duì)比】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闪檬,一起剝皮案震驚了整個(gè)濱河市星著,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粗悯,老刑警劉巖虚循,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異样傍,居然都是意外死亡横缔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門衫哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茎刚,“玉大人,你說我怎么就攤上這事撤逢√哦В” “怎么了粮坞?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長初狰。 經(jīng)常有香客問我莫杈,道長,這世上最難降的妖魔是什么奢入? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任筝闹,我火速辦了婚禮,結(jié)果婚禮上腥光,老公的妹妹穿的比我還像新娘关顷。我一直安慰自己,他們只是感情好柴我,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布解寝。 她就那樣靜靜地躺著,像睡著了一般艘儒。 火紅的嫁衣襯著肌膚如雪聋伦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天界睁,我揣著相機(jī)與錄音觉增,去河邊找鬼。 笑死翻斟,一個(gè)胖子當(dāng)著我的面吹牛逾礁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访惜,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘹履,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了债热?” 一聲冷哼從身側(cè)響起砾嫉,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窒篱,沒想到半個(gè)月后焕刮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墙杯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年配并,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片高镐。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溉旋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫉髓,到底是詐尸還是另有隱情低滩,我是刑警寧澤召夹,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站恕沫,受9級(jí)特大地震影響监憎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婶溯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一鲸阔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迄委,春花似錦褐筛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至信轿,卻和暖如春晃痴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背财忽。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工倘核, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人即彪。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓紧唱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隶校。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漏益,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問題來源 據(jù)說著名猶太歷史學(xué)家Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特后,39個(gè)猶太人與Josephu...
    AceKitty閱讀 857評(píng)論 1 5
  • 今天看了一下約瑟夫問題深胳,嗯遭庶,感覺自己智商欠費(fèi):( 還是來總結(jié)下好啦~ 問題 約瑟夫是猶太軍隊(duì)的一個(gè)將軍,在反...
    ying_zhang閱讀 6,993評(píng)論 0 2
  • 1.需求---- 經(jīng)典約瑟夫問題 首先翎苫,我們需要知道什么是約瑟夫問題权埠?即設(shè)有n個(gè)人圍成一圈,現(xiàn)從第m個(gè)人開始報(bào)數(shù)煎谍,...
    愛因斯沒有坦閱讀 5,124評(píng)論 1 0
  • 今天立冬呐粘,遠(yuǎn)方的朋友們記得多添一件衣服满俗。 離開校園转捕,我在隔壁大學(xué)的橋上看人來人往,聽著一本大學(xué)的廣播唆垃。 我羨慕一本...
    忘記吧陌生閱讀 325評(píng)論 2 2
  • 【白色走廊】 截癱病人(1) 文|冰月月 -1- 孟琪下班后滿腦子都是那個(gè)摔傷的大媽五芝,晚上給自己的母親打了個(gè)電...
    冰月月閱讀 522評(píng)論 12 24