NOIP大纲整理:(六)字符串4:随机算法

随机算法

随机生成树

①随机生成一棵树:

for(int i=2;i<=n;i++)/*随机生成一棵树*/
{
    cout<<rand()%(i-1)+1<<' '<<i<<endl;
}//深度为lgn

②随机生成一棵长毛的链:

/*随机生成一棵长毛的链:1~n/2*/
for(int i=2;i<=n/2;i++) cout<<i-1<<''i<<endl;
for(int i=n/2+1;i<=n;i++) cout<<rand()%(i-1)+1<<''<<endl;

③给你一张图,生成一张图:

/*给你一张图,生成一张图,10万个点,20万条边 */
map<long long,int> mp;
for(int i=1;i<=200000;i++)
{
    int A=rand()%n+1;
    int B=rand()%n+1;
   while(A==B||mp[1ll*A*100005+B])
    {
        A=rand()%n+1;
        B=rand()%n+1;
    }
    mp[1ll*A*10005+B]=1;
    cout<<A<<''<<B<<endl;
}

④随机生成一个连通图: 

先生成一棵树,这棵树上的边是一定存在的,在随机其他的边。

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/81435847