怎么用c++洗牌算法生成雷区
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"怎么用c++洗牌算法生成雷区"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么
千家信息网最后更新 2026年11月01日怎么用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安全错误
数据库的锁怎样保障安全
中智农互联网科技
重生之互联网科技帝国
科技和互联网公司
盈实互联网科技
互联网科技公司电话
互联网科技上市公司
上海亿帐通互联网科技
科技赋能互联网健康
成都互联网科技公司100强
互联网科技与管理
互联网科技公司有风险吗
崇明区互联网教育科技售后服务
互联网媒体平台算高科技产业
企晟互联网信息科技有限公司
为客找房互联网科技公司怎么样
科技互联网的核心竞争力
广州千川互联网科技有限公司
领航科技大厦互联网公司
三亚科技创新互联网基地
互联网对科技影响
什么是科技互联网
互联网 科技创新
深圳互联网络科技有限公司
科技创新互联网企业
广州紫鲸互联网科技
现代互联网科技股
如何创新互联网科技
互联网科技快讯热点
银川新华互联网科技学校是国营吗
现代科技的标志之一的互联网