怎么用c++洗牌算法生成雷区
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇"怎么用c++洗牌算法生成雷区"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么
千家信息网最后更新 2025年12月02日怎么用c++洗牌算法生成雷区
这篇"怎么用c++洗牌算法生成雷区"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么用c++洗牌算法生成雷区"文章吧。
引言
首先看一道题目:有一个大小为100的数组,里面的元素是从 1 到 100,随机从数组中选择50个不重复数。
用 Math.random() * 100 ,就可以拿到一个 0 到 99 的随机数,是不是重复50次就可以了?当然不是,假如,第一次随机到5,第二次如果再一次随机到5的话,要求是选择不重复的数,所以要选出50个不重复的数的话,随机次数远远大于50,因为越到后面随机到的数与前面选出的数重复的概率越大。
怎么解决呢?大家都玩过或见过发牌,54张牌,发一张牌,发牌人手里就少一张,直至将所有牌都发完。
时间复杂度为O(n),空间复杂度为O(1),缺点必须知道数组长度n。
代码:
void Knuth_Durstenfeld_Shuffle(vector&arr)
{
for (int i=arr.size()-1;i>=1;--i)
{
srand((unsigned)time(NULL));
swap(arr[rand()%(i+1)],arr[i]);
}
}
洗牌算法生成雷区:
将排列好的雷,用洗牌算法打乱生成雷区图
for(int i=N*M-1;i>=0;i--)
{
int iX = i/M; //iX为X坐标
int iY = i%M; //iY为Y坐标
int randNumber = (int)(Math.random()*(i+1));
int randX = randNumber/M;
int randY = randNumber%M;
swap(iX,iY,randX,randY);
}以上就是关于"怎么用c++洗牌算法生成雷区"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
算法
雷区
生成
内容
c++
数组
复杂
坐标
复杂度
文章
知识
篇文章
选出
选择
一道
人手
代码
价值
元素
大小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
智能家居服务器如何使用
oppo手机正义枪战服务器不在
数据库的编辑软件是什么
国内生产服务器有哪些
广西推广软件开发
sql数据库管理 app
农业银行软件开发工程师待遇
U8服务器增加补丁
服务器初学
计算机软件开发就业前景6
上海电力服务器地址
简述web服务器的安全设置步骤
解除数据库勒索病毒
建筑师服务器管理
英语网络安全建议句子
软件开发完成情况怎么写
sql数据库死锁解决
数据库中的窗体有什么
北京智源紫光网络技术
百柏服务器
海康服务器登陆地址
我的世界基因服服务器
软件开发员课程
有些电脑访问不到我的云服务器
招银网络软件开发做什么
深川萌丫网络技术有限公司
淄川mrp管理软件开发公司
英语网络安全建议句子
怀柔区数据网络技术咨询
部队网络安全摘要