C ++でBFSを使用して、特定のソースから宛先までのすべてのパスを出力します
この問題では、有向グラフが表示され、幅優先探索(BFS)を使用してグラフのソースから宛先までのすべてのパスを印刷する必要があります。
有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。
問題を理解するために例を見てみましょう-
ソース=K宛先=P
出力
K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P
ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。
ソースから宛先までのすべてのパスを印刷するには、グラフをトラバースしてパスを保存してから、有効なパスを印刷する必要があります。
DFSを使用する場合、プロセスは簡単ですが、この場合、実装には少し注意が必要です。
この問題を解決するには、パスを格納するキューが必要になります。ソースノードから開始して、BFSを使用してアレイのトラバースを開始します。トラバース
ツリーを作成し、キューにチェックインします。宛先の頂点に到達した場合は、キュー要素を出力します。それ以外の場合は無視します。
#include <bits/stdc++.h>
using namespace std;
void printPath(vector<char>& path) {
int size = path.size();
for (int i = 0; i < size; i++)
cout<<path[i]<<" ";
cout<<endl;
}
int isVertexVisited(char x, vector<char>& path) {
int size = path.size();
for (int i = 0; i< size; i++)
if (path[i] == x)
return 1;
return 0;
}
void pathSourceToDestination(vector<vector<char> >&g, char src, char dst, int v) {
queue<vector<char> > q;
vector<char> path;
path.push_back(src);
q.push(path);
while (!q.empty()) {
path = q.front();
q.pop();
char last = path[path.size() - 1];
if (last == dst)
printPath(path);
for (int i = 0; i < g[last].size(); i++) {
if (!isVertexVisited(g[last][i], path)) {
vector<char> newpath(path);
newpath.push_back(g[last][i]);
q.push(newpath);
}
}
}
}
int main() {
vector<vector<char> > g;
int v = 4;
g.resize(4);
g['X'].push_back('S');
g['X'].push_back('A');
g['X'].push_back('N');
g['A'].push_back('S');
g['N'].push_back('X');
g['N'].push_back('A');
char src = 'N', dst = 'S';
cout<<"path from src "<<src<<" to dst "<<dst<<" are \n";
pathSourceToDestination(g, src, dst, v);
return 0;
} 出力
path from src N to dst S are N X S N A S N X A S
-
C++で特定のノードから距離kにあるすべてのノードを出力します
この問題では、二分木、ターゲットノード、整数Kが与えられます。ターゲットノードから距離Kにあるツリーのすべてのノードを印刷する必要があります。 。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう K =2 ターゲットノード:9 出力 − 5 1 3. 説明 − 距離は、ノードの上位、下位、または同じレベルで取得できます。したがって、それに応じてノードを返します。 この問題を解決するには、ターゲットノードからK距離離れたノードのタイプを理解する必要があります。 上記の試験から、k個の離
-
特定のソースから宛先までのすべてのパスをC++で出力します
この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。