约瑟夫问题——使用STL链表解决

n个人围坐,从第一个人开始报数,数到m的人出列,再从下一个人开始重新报数,求出列顺序。

/**
joseph(A,B,jumNum) A为输入的list,B为输出的list
    while(!B.empty())
        for(i=0...jumNum-1)
            iter++;
            if(iter==A.end) 以下两行,是保持循环
                iter=A.begin
        B.push(*iter)
        A.erase(iter);
*/
template
<class T>
void joseph(list<T>& a, list<T>& b,  int jumNum){
    list
<T>::iterator iter=a.begin();
    list
<T>::iterator temp;
    
while(!a.empty()){
        
for(int i=0;i<jumNum;i++){
            iter
++;
            
if(iter==a.end())
                iter
=a.begin();
        }
            b.push_back(
*iter);
            temp
=iter;
            iter
++;
            
if(iter==a.end())
                iter
=a.begin();
            a.erase(temp);
    }
}

posted on 2008-10-23 13:41 deep2 阅读(2184) 评论(3)  编辑 收藏 引用 所属分类: 链表

评论

# re: 约瑟夫问题——使用STL链表解决 2008-10-23 15:06

楼主的博文不错,加深对基础数据结构的学习  回复  更多评论   

# re: 约瑟夫问题——使用STL链表解决 2008-10-24 00:36 jh

一点小小的建议:
a.erase(temp); 改为: itor = a.erase(itor);
这样就不用temp了  回复  更多评论   

# re: 约瑟夫问题——使用STL链表解决 2008-10-24 13:03 deep2

@jh
谢谢~!  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜