怎么用c++洗牌算法生成雷区
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇"怎么用c++洗牌算法生成雷区"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么
千家信息网最后更新 2025年01月23日怎么用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安全错误
数据库的锁怎样保障安全
软件开发项目成本和利润的
光纤传输与网络技术应用
阜师院数据库试卷
拉萨纳铭网络技术
港台的服务器安全性好吗
dns服务器未响应xp
应用软件开发相关的标准
计算机网络安全 试题
网络安全利好信息
java 3d软件开发工具
java 读取数据库数据
数据库报错26802
云计算对服务器有什么要求
软件开发组件环境
南昌软件开发培训班
违反网络安全处罚制度公司
苏宁易购云服务器地址
宁夏 软件开发 公司
wdcp数据库主机
网络安全研究生在读博
宁德市专业性网络安全公司
数据库加密的常用技术
阜师院数据库试卷
genecards数据库全称
oracle数据库索引
坪山区网络技术转移好处
每个数据库查询类型有哪些
软件开发技校哪家好
网络技术方面建议
描述电力线网络技术的用途