数据结构的里约瑟夫环的一种简单有效的算法:
#include "stdio.h"
#include "stdlib.h"
struct circle
...{
int ID;
struct circle* next;
};
int main(int argc, char* argv[])
...{
int n,m,i;
scanf("%d %d", &n, &m);
struct circle* start=(struct circle*)malloc(sizeof(struct circle*));
struct circle* c; int person = n;
start->ID=1;
c=start;
for(i=1;i<=n;i++)
...{
c->next=(struct circle*)malloc(sizeof(struct circle*));
c->next->ID=i+1;
if(i==n)
c->next=start;
else
c=c->next;
}
while((c!=c->next))
...{
for(i=1;i<=m;i++)
...{
if(i==m)
...{
person--;
c->next=c->next->next;
}
else
...{
c=c->next;
}
}
}
do
...{
printf("%d ", c->ID);
c=c->next;
person--;
}
while(c!=c->next);
putchar('');
return 0;
}约瑟夫环所描述的是:
N个人围成一圈由1-N编队由1-M连续报数,当某人报到M时,该人出队,从下一个人开始由1-M继续报数,并不断重复此过程,直到所剩人数不足M时停止。
本文介绍了一种解决约瑟夫环问题的简单有效算法。通过使用链表数据结构,该算法可以模拟N个人围成一圈进行报数并逐个出圈的过程,直至最后剩下的人。文章提供了一个具体的C语言实现示例。
625

被折叠的 条评论
为什么被折叠?



