帮助我理解这个算法(简单)



我刚刚创建了一个队列类,现在我必须使用它来完成这个操作。

写一个c++程序,生成所有使用a,B, c作为字母的字符串。

字符串必须按以下顺序生成:一个BCAAAB交流英航BB公元前CACBCCAAA艺术展AAC格式阿坝ABB美国广播公司ACAACBACC等。

它应该这样做,直到我的队列溢出。

现在,我就是不明白老师建议使用的算法,也就是这个。

从队列中的A、B和C开始。

这个add add add让我很困惑,它是怎么把这些字母按这个顺序排列的?

我想你老师的意思是"Add A, Add B, Add C"

假设队列中有A, B和C。您从队列中取出第一个并打印它。这个应该输出A,然后加一个A。这给了你AA,你把它推回队列。你还可以在你最后弹出的字符串中添加B和C(给你AB和AC),并将它们推回队列中。现在你的队列包含[B,C,AA,AB,AC]。接下来,您将弹出B并对其执行相同的操作序列,以此类推,直到堆栈中的空间用完为止。

让我们的行为成为:

For any token X, add XA, XB, and XC to the queue.

我们的流类似于:

Start with a Queue
A B C
Pop (and display) off A
B C
Behave on token: "A"
  add AA
  add AB
  add AC
B C AA AB AC
Pop (and display) off B
C AA AB AC
  add BA
  add BB
  add BC
C AA AB AC BA BB BC

如果我们假设函数是

main() {
    Queue q;
    q.add("A");
    q.add("B");
    q.add("C");
    while(true) {
        process(q.pop());
    }
}
process(String x, Queue q) {
    display x;
    q.add(x + "A");
    q.add(x + "B");
    q.add(x + "C");
}

现在明白了吗?

A B C

打印新的队列状态B C A A A

打印B新的队列状态A A A B B B

打印C新的队列状态A A A B B B B C C C

打印新的队列状态A A B B B B C C C C A A A A

打印新的队列状态A B B B C C C A A A A A A A A

打印新的队列状态B B B C C C A A A A A A A A A A A A A A A A

这是我对循环的第一次解释,但我一定是弄错了,因为我马上从1重复到3。

更新:在看到其他回复后,肯定读错了最初的问题。

最新更新