随机算法
随机生成树
①随机生成一棵树:
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;
}
④随机生成一个连通图:
先生成一棵树,这棵树上的边是一定存在的,在随机其他的边。