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

时间:2011-09-15 21:40:05

标签: c++ algorithm queue

我刚刚创建了一个队列类,现在我必须使用它来执行此操作。

编写一个c ++程序,使用A,B和C作为字母生成所有字符串。

必须按以下顺序生成字符串: 一个 乙 C AA AB AC BA BB 公元前 CA CB CC AAA AAB AAC ABA ABB ABC ACA ACB ACC 等

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

现在,我根本不理解老师建议使用的算法,就是这个。

从队列中的A,B和C开始。 “删除它显示它然后添加添加添加”

add add add thing会让我失望,它是如何以这个特定的顺序完成这些字母的?

3 个答案:

答案 0 :(得分:7)

我认为你的老师的意思是“添加A,添加B,添加C”。

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

答案 1 :(得分:4)

让我们的行为是:

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");
}

立即获取?

答案 2 :(得分:0)

A B C

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

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

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

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

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

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

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

更新:看到其他回复后,肯定会错误地阅读初始问题。