C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の単語リストのリストから形成できるすべての文を再帰的に印刷します


単語のリストを指定します。目標は、再帰的アプローチを使用してリストから単語を取得することによって形成できるすべての可能な文を作成することです。両方のリストから一度に1つの単語しか取得できません。

このためのさまざまな入出力シナリオを見てみましょう

入力

sentence[row][col] = {{"I", "You"},
   {"Do", "do not like"},
   {"walking", "eating"}}

出力

I Do walking
I Do eating
I like walking
I like eating
You Do walking
You Do eating
You like walking
You like eating

説明 −文[0-2]の各リストから1つの単語を取得すると、上記の文が得られます。

入力

sentence[row][col] = {{"work", "live"},{"easy", "happily"}}

出力

work easy
work happily
live easy
live happily

説明 −文[0-1]の各リストから1つの単語を取得すると、上記の文が得られます。

  • 文字列型の2次元配列をsentence[row][col]として宣言します。データをRecursive_Print(sentence)として関数に渡します。

  • Recursive_Print(sentence)としての関数内

    • 文字列型の配列をarr[row]として作成します。

    • iがcol未満になるまで、ループFORをiから0まで開始します。ループ内で、IFセンテンス[0] [i]が空でないことを確認してから、Recursion(sentence、0、i、arr)として関数を呼び出します。

  • 関数内でRecursion(string statement [row] [col]、int temp_1、int temp_2、string arr [row])

    • arr[temp_1]をsentence[temp_1][temp_2]に設定します。

    • temp_1が行-1であるかどうかを確認してから、iが行より小さくなるまでiから0までループFORを開始します。ループ内で、arr[i]を出力します。

    • iがcol未満になるまで、ループFORをiから0まで開始します。ループ内で、IFセンテンス[temp_1 + 1] [i]がスペースと等しくないことを確認してから、Recursion(sentence、temp_1 + 1、i、arr)として関数を再帰的に呼び出します。

  • 結果を印刷します。

以下のプログラムで使用されているアプローチは次のとおりです

#include<bits/stdc++.h>
#define row 3
#define col 3
using namespace std;
void Recursion(string sentence[row][col], int temp_1, int temp_2, string arr[row]){
   arr[temp_1] = sentence[temp_1][temp_2];
   if(temp_1 == row - 1){
      for(int i=0; i < row; i++){
         cout << arr[i] << " ";
      }
      cout << endl;
      return;
   }
   for(int i=0; i < col; i++){
      if(sentence[temp_1+1][i] != ""){
         Recursion(sentence, temp_1+1, i, arr);
      }
   }
}
void Recursive_Print(string sentence[row][col]){
   string arr[row];
   for(int i=0; i < col; i++){
      if(sentence[0][i] != ""){
         Recursion(sentence, 0, i, arr);
      }
   }
}
int main(){
   string sentence[row][col] = {{"Ajay", "sanjay"},{"Like", "is"},{"Reading", "eating"}};
   Recursive_Print(sentence);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Ajay Like Reading
Ajay Like eating
Ajay is Reading
Ajay is eating
sanjay Like Reading
sanjay Like eating
sanjay is Reading
sanjay is eating

  1. C++でリーフノードから距離kにあるすべてのノードを出力します

    この問題では、二分木と数Kが与えられます。葉のノードからkの距離にある木のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1/2 /なし)がある特別なツリーです。 リーフノード 二分木のは、ツリーの最後にあるノードです。 この問題では、リーフノードからの距離はリーフノードよりも高いレベルのノードです。レベル4のリーフノードから距離2のノードがレベル2になるとします。 問題を理解するために例を見てみましょう K =2 出力 − 6 9. この問題を解決するために、ツリーをトラバースします。すべては、リーフノードに到達するレベルごとにすべて

  2. 特定のソースから宛先までのすべてのパスをC++で出力します

    この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。