| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖
标题:一道算法题目,约瑟夫环问题,输入数据大于10速度很慢,如何优化?
取消只看楼主 加入收藏
fanrongqi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-11-7
结帖率:0
收藏
已结贴  问题点数:10 回复次数:0 
一道算法题目,约瑟夫环问题,输入数据大于10速度很慢,如何优化?
有2*k个人,围成一圈,问,最小的m(从1到m报数,数到m的人离开队列),使得编号k+1到2*k的人先出队列。

我用单向循环链表来做,不过发现数据大于10的时候速度很慢,我不知道如何优化,

题目原题http://

我的代码如下:



#include <iostream>
using namespace std;


typedef struct node{
    int number;
    bool exit;
    struct node* next;
}node,*pnode;


int main(){
   
    node head;
    head.number=1;
    head.exit=true;
    head.next=NULL;

   
    node* p=NULL;
    p=&head;
    node* q=NULL;
   
    int k;
    int i;
    int m;
    int count;
   
   
    while(cin>>k){

        if (k==0)return 0;

        for (i=0;i<2*k-1;i++)
        {
            q=new node;
            q->number=i+2;
            q->exit=true;
            q->next=NULL;
            p->next=q;
            p=q;
            
        }
        p->next=&head;

        for (m=1;m<2504884;m++)//0x7fffffff
        {
            for (i=0;i<2*k;i++)
            {
                p->exit=true;
                p=p->next;
            }
            p=&head;
            i=1;
            count=0;
            while(1){
                if (i <= m)
                {
                    if (p->exit==true)
                    {
                        if (i==m)
                        {
                            int fsdfsd=p->number;
                            if (p->number <= k)break;
                            else
                            {
                                count++;
                                p->exit=false;
                                if (count==k)
                                {
                                    goto showm;
                                }
                            }   
                        } //if(i==m)
                        p=p->next;
                        i++;
                    }
                    else
                    {
                        p=p->next;
                    }
                }
                else
                {
                    i=1;
                }   
            }//while(1)
        }//m=0;m<10000;m++
showm:
        cout<<m<<endl;

        p=&head;
        for (i=0;i<2*k;i++)
        {
            p->number=0;
            p->exit=false;
            p=p->next;
        }
        
    }
    return 0;
}
搜索更多相关主题的帖子: 约瑟夫 
2011-02-19 18:12
快速回复:一道算法题目,约瑟夫环问题,输入数据大于10速度很慢,如何优化?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019720 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved