C++-用递归打乱队列
C++ - Shuffle a queue with recursion
我有一个任务,要求我基本上创建一个算命应用程序。我需要做的是,首先创建一副牌,然后洗牌,洗牌过程必须是递归的,并且根据分配没有任何循环。甲板还必须是一个队列数据结构。
我有一个卡片结构,它有两个char变量,其中一个包含卡片的类型,比如D代表钻石,H代表心形,另一个变量是卡片的编号,比如4、J或K。我为卡片创建了一个队列,称为deck,我用一个基本循环初始化了deck,队列的前13个元素是diamonds,接下来的13个元素是俱乐部等等
问题在于洗牌。我的牌组必须是一个队列,但如果有一个数组的解决方案,例如,我可以使用该数组进行洗牌,然后将数组转移到队列中。但目前我不知道如何做到这一点,无论是使用数组还是队列,伪代码对我来说都是惊人的
我做了所有的研究,但没有任何关于递归洗牌的内容,现在我没有想法了,我不希望这个程序有一个完整的解决方案,我只需要一些有关递归洗牌的基本想法。
非常感谢。
要递归地打乱数组,其思想如下。
1) 取前面的元素,随机选择另一个元素,交换它们。
2) 打乱剩余的数组(没有前面的元素)。
3) 当当前位置位于数组的末尾时,递归停止
void shuffle(std::array<Card, 52>& deck, int pos = 0)
{ if (deck.size() - pos < 2) return;
// select a random element behind the current one
int rnd = pos + 1 + std::rand() % (deck.size() - pos - 1);
std::swap(deck[pos], deck[rnd]);
// recursively shuffle the remainder of the deck
shuffle(deck, pos + 1);
}
在您设置一个甲板并初始化它之后,您可以调用shuffle(deck);
p.s:这不是"理想的"C++14代码,因为我们可以使用高级功能,但这只是一个提示如何使用递归打乱数组。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 了解使用堆栈实现队列的递归调用机制
- 如何递归地反转队列
- 使用队列的非递归回溯:内存不足
- C++-用递归打乱队列
- 如何在没有递归的情况下清除四叉树(也许使用队列?).