高階約瑟夫問題
總結
初學資料結構的迴圈鍊錶,正好利用迴圈鍊錶可以很容易的解決上述問題。
#include
#include
#include
typedef int elemtype;
#define len sizeof
(node)
#define n
41//總人數 41
#define m 3
//密碼固定為3
typedef struct node
node;
typedef struct node linklist;
linklist*
creat_list()
;void
out_list
(linklist *l)
;void
ysf_out_list
(linklist *l)
;void
main()
// 《初始化函式》
linklist*
creat_list()
p->next = h-
>next;
free
(h);
return p;
}// 《初始化鍊錶輸出函式》
void
out_list
(linklist *l)
if(i ==n)
i++;}
//printf("\n%d\n",p->next->data); //僅用於測試
printf
("\n\n");
}// 《約瑟夫環問題函式》
<1> 每個節點多了乙個密碼域,用來儲存各自的報數上限。
<2> 相比簡單的約瑟夫問題,只需要克服密碼值會動態變換的問題即可,利用迴圈鍊錶對上述**簡單修改即可。
// ★★★假設共有5個節點(如果想增加更多的節點,可以在巨集定義中,僅修改n的值即可)★★★
#include
#include
#include
typedef int elemtype;
#define len sizeof
(node)
#define n
5//★★★總人數確定值,本例假設為 5
typedef struct node
node;
typedef struct node linklist;
linklist*
creat_list()
;void
out_list
(linklist *l)
;void
ysf_out_list
(linklist *l)
;void
main()
linklist*
creat_list()
p->next = h-
>next;
free
(h);
return p;
}// 《初始化鍊錶輸出函式》
void
out_list
(linklist *l)
if(i ==n)
i++;}
//printf("\n%d\n",p->next->data); 僅僅用於測試,可以忽略
printf
("\n\n");
}// 《高階約瑟夫環問題》
初學資料結構,繼續加油!!!!
迴圈鍊錶實現解決約瑟夫問題
typedef struct tag circlelist 頭節點 tcirclelist circlelist circlelist creat memset ret,0,sizeof tcirclelist ret header.next null ret slider null ret len...
約瑟夫問題的迴圈鍊錶實現
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...
迴圈鍊錶 約瑟夫問題
設編號分別為 1,2,n的n個人圍坐一圈。約定序號為k 1 k n 的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。演算法思路 1 先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。2 找到第k個結點,即第乙個開始報數的人...