`

约瑟夫环算法

 
阅读更多

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

例子

  n = 9, k = 1, m = 5   【解答】   出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。

链表方法

  这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构 ,就是将一个链表的尾元素指针指向队首元素。 p->link=head   解决问题的核心步骤:(程序的基本算法)   

1.建立一个具有n个链结点,无头结点的循环链表;   

2.确定第1个报数人的位置;   

3.不断地从链表中删除链结点,直到链表为空。   

void JOSEPHUS(int n,int k,int m) //n为总人数,k为第一个开始报数的人,m为出列者喊到的数
  {
  /* p为当前结点 r为辅助结点,指向p的前驱结点 list为头节点*/
  LinkList p,r,list; /*建立循环链表*/
  for(int i=0;i<n;i++)
  {
  p=(LinkList)malloc(sizeof(LNode));
  p->data=i;
  if(list==NULL)
  list=p;
  else
  r->link=p;
  r=p;
  }
  p->link=list; /*使链表循环起来*/
  p=list; /*使p指向头节点*/
  /*把当前指针移动到第一个报数的人*/
  for(i=0;i<k;i++)
  {
  r=p;
  p=p->link;
  }
  /*循环地删除队列结点*/
  while(p->link!=p)
  {
  for(i=0;i<m-1;i++)
  {
  r=p;
  p=p->link;
  }
  r->link=p->link;
  printf("被删除的元素:%4d ",p->data);
  free(p);
  p=r->link;
  }
  printf("\n最后被删除的元素是:%4d",P->data);
  }

 参见百度百科

 

分享到:
评论

相关推荐

    数据结构--约瑟夫环算法描述

    约瑟夫环算法就是解决这类问题的一种方法。 在提供的代码中,`Josephas` 函数实现了约瑟夫环问题的解决方案。它接收三个参数:`n` 表示总人数,`m` 是计数的间隔(即每数到 `m` 的人将出列),而 `s` 是起始计数的...

    约瑟夫环 算法及代码 数据结构

    《约瑟夫环算法及其在数据结构中的应用》 约瑟夫环算法,又称为约瑟夫环问题,是计算机科学中的一个经典问题,源于古罗马的一个传说。它涉及到链表、循环数组等数据结构,以及递归或迭代的算法设计。在本篇文章中,...

    约瑟夫环算法设计报告

    【约瑟夫环算法设计】 约瑟夫环问题是一个经典的理论问题,主要涉及链表操作和循环算法的设计。在这个问题中,n个人按照顺时针方向围成一个圈,每个人都有一个唯一的编号从1到n。游戏开始时,选择一个报数上限值m,...

    用Java和Python实现约瑟夫环算法的代码示例.zip

    用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现...

    用c语言编写约瑟夫环算法

    约瑟夫环算法,也称为约瑟夫问题(Josephus Problem),是一个著名的理论问题,源自古罗马的一个历史故事。在该问题中,人们站成一个圈,并按照顺时针或逆时针顺序从1开始报数。每次数到特定值的人会被排除出圈,...

    约瑟夫环 算法设计 计算机

    算法设计中,约瑟夫环的问题,可以练习一下你的逻辑思维能力,以及你的分析能力。

    数据结构的约瑟夫环算法源码

    在数据结构与算法领域,约瑟夫环算法常被用来探讨链表操作和循环数组的实现。 在这个场景中,我们有一份使用C++语言实现的约瑟夫环算法源码。C++是一种强大的、面向对象的编程语言,适合处理复杂的算法问题。C++的...

    约瑟夫环问题算法

    在编程领域,约瑟夫环问题通常被用来考察程序员的逻辑思维和算法实现能力。 在C#中实现约瑟夫环问题,我们可以采用几种不同的方法,如链表、数组或者循环数组等数据结构。这里我们主要讨论基于循环数组的解决方案。...

    数据结构中线性表的应用,约瑟夫环算法 便于数据结构的学习.zip

    在本压缩包中,我们主要探讨的是线性表的应用以及一个有趣的算法——约瑟夫环算法。 线性表是由n(n≥0)个相同类型元素构成的有限序列,可以顺序存储或链式存储。顺序存储的线性表通常用数组实现,操作简单,但...

    约瑟夫环算法 数据结构实习题

    约瑟夫环 算法 数据结构 实习题 在devc++测试通过

    约瑟夫环 算法

    约瑟夫环算法,又称约瑟夫问题,是一个经典的理论问题,源于历史故事。问题的核心是:n个人围成一个圈,从某个人开始报数,数到m的人出局,然后下一轮从下一个人继续报数,直到只剩一个人为止。目标是找到在游戏结束...

    Joseph约瑟夫环算法

    非常简单的约瑟夫环算法:用C++语言编译,采用键表功能实现约瑟夫环问题的实现。

    约瑟夫环算法以及报告

    【约瑟夫环算法及其应用】 约瑟夫环算法,又称约瑟夫问题,是一个著名的理论问题,源自古罗马犹太历史学家约瑟夫斯所记载的故事。在该问题中,n个人围成一个圈,从第一个人开始按顺时针方向报数,数到m的人出列,...

    数据结构中线性表的应用,约瑟夫环算法。便于数据结构的学习.zip

    约瑟夫环算法源于一个古老的传说:古代犹太人约瑟夫被俘后,为了避免全体被杀,提出一个方法:所有俘虏站成一个圈,从某人开始报数,数到特定数值的人出圈,然后下一个人继续数,直到剩下最后一个人为止。...

    约瑟夫环算法C++实现

    约瑟夫环的算法的实现,可以直接运行,经过测试了的,详细情况可以自己下载后查看。

    文本输入输出约瑟夫环算法

    这是文本输入输出的字符约瑟夫算法,可以编译通过,使用前建立input.txt文本,然后然后执行算法,最后在生成的OUTPUT.txt文档

    约瑟夫环约瑟夫环约瑟夫环

    约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环

    约瑟夫环的算法实现

    约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马历史的一个故事。在数学和计算机科学中,它通常被...同时,通过分析和实现约瑟夫环算法,我们可以提高解决问题和编写高效代码的能力。

Global site tag (gtag.js) - Google Analytics