美文网首页计蒜客刷题
最小环问题之信息传递

最小环问题之信息传递

作者: 任正非用甘油炸隔壁小王 | 来源:发表于2018-03-05 23:27 被阅读0次

    首先定一个小小的目标,一个学期肝完计蒜客上所有的题目..
    这是第一道题目 [题目链接]

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<queue>
    using namespace std;
    const int maxn=200005;
    int input[maxn]; //record input
    int record[maxn]= {}; //记录多少个数指向他
    int  note[maxn]= {}; //标记是否剔除
    queue<int>outman;
    int n,ans=0;
    
    void inputs()
    {
        cin>>n;
        for(int i=1; i<=n; i++)
        {
            cin>>input[i];
            record[input[i]]++;
        }
        ans=n;
    }
    
    int main()
    {
        inputs();
        //第一步先剔除最开始的
        for(int i=1; i<=n; i++)
        {
            if(record[i]==0)
            {
                outman.push(i);
                note[i]=1;
            }
        }
        //继续剔除
        int x;
        while(!outman.empty())
        {
            x=outman.front();
            outman.pop();
            record[input[x]]--;
            if(record[input[x]]==0)
            {
                note[input[x]]=1;
                outman.push(input[x]);
            }
        }
        //接下来找最小环
        int sum,point;
        for(int i=1; i<=n; i++)
        {
            if(note[i]==0&&record[i]!=0)
            {
                sum=1;
                point=input[i];
                note[i]=1;
                while(note[point]==0)
                {
                    note[point]=1;
                    point=input[point];
                    sum++;
                }
                if(sum<ans)
                ans=sum;
            }
        }
        cout<<ans;
        return 0;
    }
    

    明天再更,现在睡觉(滑稽)

    相关文章

      网友评论

        本文标题:最小环问题之信息传递

        本文链接:https://www.haomeiwen.com/subject/vcbkfftx.html