2011-09-15 9 views
1

私はちょうどキュークラスを作ったので、今これを使う必要があります。私はこのアルゴリズム(単純)を理解するのを助けます

A、B、Cを文字として使用してすべての文字列を生成するためのC++プログラムを作成します。

文字列は以下の順序で発生する必要があります B C AA AB AC BA BB BC CA CB CC AAA AAB AAC ABA ABB ABC ACA ACB ACC など

これは、キューがオーバーフローするまでこれを行うことになっています。

今、私は教師が使用するアルゴリズムを理解していません。これはこれです。

キュー内のAとBとCで開始します。 "削除それを表示してから追加を追加Addを追加

このアドオンを追加すると、この特定の順序でこれらの文字がどのように取得されますか?

答えて

3

私たちの行動が可能ましょう:私達は私達の機能をふりをした場合

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

は今それを取得している

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 

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

私たちの流れのようなものでしょうか?

+0

キューはchar配列を使用しているので、私はあなたが何を言っているのか理解していますが、私はその実装方法がわかりません –

+0

これは基本的に幅優先検索の仕組みです。 –

+1

@タイラー「頭」と「尾」の位置カウンターを保持します。あなたがポップしたときに 'myArray [head];'をポップし、 'head ++;'を使ってあなたがそれを過ぎ去っていることを示します。キューに追加するときは、それを追加するために 'myArray [tail] = whatImAdding;'に、それが成長したことを示す 'tail ++ 'に移動します。 'tail 'が配列の一部ではないものにアクセスしようとすると、これはオーバーフローします。 – corsiKa

7

あなたの先生は「Add A、Add B、Add C」を意味すると思います。

キューにA、B、Cがあるとします。最初のキューをキューからポップして印刷します。これはAを表示するはずです。次にそれにAを追加します。これによりAAが得られます。このAAはキューにプッシュバックされます。また、Bを追加し、最後にポップした文字列にCを追加して(ABとACを与えて)、キューに戻します。キューには[B、C、AA、AB、AC]が含まれています。次に、Bをポップし、同様の操作を順番に実行します。スタック内のスペースがなくなるまで続きます。

0

ABC

プリント 新しいキュー状態 BCAAA

印刷物のB 新しいキュー状態 CAAABBB

プリントC 新しいキュー状態 AAABBBCCC

プリント 新しいキュー状態 AABBBCCCAAA

は 新しいキュー状態 を印刷しABBBCCCAAAAAA

私は行くので、これはサイクルの私の最初の解釈だったが、私はそれが間違って取得する必要があります

BBBCCCAAAAAAAAA

新しいキュー状態 を印刷します1リピートから3リピートまで。

更新:他の応答を見て間違った初期の問題を間違いなく読んでください。

関連する問題