約瑟夫環

  • 線性的應用
    • 約瑟夫環
    • 編號分別爲:1,2,- - - -n,的n個人圍坐在一起,約定序號爲k(0<=1<=n)的人從1開始計數,數到m那個人出列,他的下一位又從1開始計數,數到m的那個人出列,他的下一位又從1開始計數數到m的那個人又出列,依次類推直到所有人出列爲止。
    • 設n=8,k=3,m=4時,如圖
      -出列序列爲(6,2,7,4,3,5,1,8);
      • 用一個不帶頭結點的循環鏈表來處理Josephuu問題;
void   Josephu(link,L,int n,k,m ){
    int i;
    link  p,r;
    L=NULL//置空表
for(I=1;j<=n;i++){//建立循環鏈表
    p=(link)malloc(sizeof(linknode));
    p->data=i;
if(L==NULL)   L=p;
else  r->next=p   r=p;
}
p->next=L;
p=L;
for(I=1;j<=k-1;j++){
r=p;
p=p->next;
}//找到第I個結點
while(p->next=p){//結點數>1時
      for(i=0;j<=m-1;i++)
      r=p;
      p=p->next;
}
r->next=p->next;
printf("%d",p->date);
free(p);
p=r->next;
}//取下一個報數的在起點指針
          printf(''&d\n'',p->data);
}//打印最後一個結點的序號








 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章