我是靠谱客的博主 害羞斑马,最近开发中收集的这篇文章主要介绍c语言 以时间做种子的随机数,为什么用时间做种子,随机数还是一样的?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

为什么用时间做种子,随机数还是一样的?0

//用蒙特卡罗算法来估算回溯法的效率//蒙特卡罗算法的思想:如果根节点有m0个儿子结点满足约束条件,在第一层就有//m0个满足条件的节点,在这m0个节点中随机选择一个结点,例如X1,用... //用蒙特卡罗算法来估算回溯法的效率

//蒙特卡罗算法的思想:如果根节点有m0个儿子结点满足约束条件,在第一层就有

//m0个满足条件的节点,在这m0个节点中随机选择一个结点,例如X1,用约束方程检测X1的所有儿子结点

//测算出满足约束条件的儿子结点个数为m1个。这样第二层总共有m0*m1个结点满足约束条件

//一般地,在第i层总共就有m0*m1*m2*……*mi个结点满足约束条件。因此满足约束条件的结点总个数

//m=1+(m0*m1)+(m0*m1*m2)+……+(m0*m1*m2*……mn)个

#include

#include

#include

#include

#include

bool place(int k,int x[])//n后问题中判断某个皇后的位置是否和前面的发生攻击

{

int i;

for(i=1;i

if(x[i]==x[k]||abs(x[i]-x[k])==abs(i-k))

return 0;

return 1;

}

int choose(int **p,int num,int k)//随机选择一个合适的结点,继续往下搜索

{

int b;

srand((unsigned)time(NULL)); //生成随机数下标来随机取得数组中的一个元素

b=rand()%num+1;

cout<

return p[k][b];

}

int estimate(int n) //用蒙特卡罗算法来估算回溯法的效率

{

int m=0,r=1,k;

int *num=new int[n+1];

int *x=new int[n+1];

int **p;

p=new int*[n+1];

for(int i=0;i

p[i]=new int [n+1];

for(k=1;k<=n;k++)

{

num[k]=0;

for(int i=1;i<=n;i++)

if(place(i,x))

{

num[k]++; //统计有多少个儿子结点满足约束条件

p[k][num[k]]=i;

}

if(num[k]==0)

return m;

r=r*num[k];

m=m+r;

x[k]=choose(p,num[k],k);//随机选择一个结点继续往下搜索

}

return m;

}

void main()

{

int num1=0,num=0;

int n;

cout<

cin>>n;

for(int i=0;i<=8;i++) //用八条路径来测试平均结点个数

{

num1+=estimate(n);

}

num=num1/8;

cout<

}

放在main里面还是不行啊,那些数还是非常有规律的 展开

最后

以上就是害羞斑马为你收集整理的c语言 以时间做种子的随机数,为什么用时间做种子,随机数还是一样的?的全部内容,希望文章能够帮你解决c语言 以时间做种子的随机数,为什么用时间做种子,随机数还是一样的?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部