欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

单向循环链表解决约瑟夫问题,循环约瑟夫,约瑟夫(Joseph)问

来源: javaer 分享于  点击 45563 次 点评:186

单向循环链表解决约瑟夫问题,循环约瑟夫,约瑟夫(Joseph)问


约瑟夫(Joseph)问题:设置编号为1,2,3,...,n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一个又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

public class Joseph {    public static void main(String[] args) {        CycLink cyclink = new CycLink();        cyclink.setLen(10);        cyclink.createLink();        cyclink.setK(2);        cyclink.setM(2);        cyclink.play();    }}// 定义节点class Child {    int no;    Child nextChild = null;    // 设置编号    public Child(int no) {        this.no = no;    }}// 定义链表class CycLink {    Child firstChild = null;    Child temp = null;    int len = 0;    int k = 0;    int m = 0;    // 设置链表长度    public void setLen(int len) {        this.len = len;    }    // 创建链表    public void createLink() {        for (int i = 1; i <= len; i++) {            Child ch = new Child(i);            if (i == 1) {                this.firstChild = ch;                this.temp = ch;            } else if (i == len) {                temp.nextChild = ch;                temp = ch;                temp.nextChild = this.firstChild;            } else {                temp.nextChild = ch;                temp = ch;            }        }    }    //输出序列    public void show(Child temp) {        System.out.print(temp.no + " ");    }    // 设置第k个人开始    public void setK(int k) {        this.k = k;    }    // 设置数到m    public void setM(int m) {        this.m = m;    }    // 开始play    public void play() {        Child temp = this.firstChild;        //找到第k个人        for (int i = 1; i < k; i++) {            temp = temp.nextChild;        }        while (this.len != 0) {            for (int i = 1; i < m; i++) {                temp = temp.nextChild;            }//数m次            //输出序列            show(temp);            //删除节点temp(将temp的下一个节点tem的内容交给temp,从而达到删除temp的效果)            Child tem = temp.nextChild;            temp.no = tem.no;            temp.nextChild = tem.nextChild;            this.len--;        }    }}//该片段来自于http://byrx.net
相关栏目:

用户点评