Ich mache ein Diagramm mit einer Liste von Adjazenz-basierte multivariable Liste. Ich habe alle bestimmten Funktionen verkauft, die eine Datenstruktur erstellen, aber ich kann die Suche nach allen möglichen Routen zwischen zwei Punkten nicht realisieren (. Ich dachte viel nach, aber konnte nicht herausfinden, wie man alle Wege bekommt, nicht nur einen. ich weiß, ich BFS verwenden müssen, aber ich kann nichts (So suchen Sie alle Pfade zwischen zwei Knoten in der verknüpften Liste Graph
#include <iostream>
#include <string>
using namespace::std;
typedef string graphElement;
typedef struct vertexTag {
graphElement data;
int visited;
struct edgeTag* edges;
struct vertexTag* next;
struct vertexTag* prev;
} vertexT;
typedef struct edgeTag {
struct vertexTag* connectsTo;
struct edgeTag* next;
} edgeT;
class graph {
private:
vertexT* head;
vertexT* tail;
vertexT curr;
int count_vertex;
queue<vertexT*> queue;
void BFS(graphElement destenetion, vertexT* startP);
vertexT* FindVertex(graphElement data);
public:
graph();
~graph();
vertexT* AddVertex(graphElement data);
void DeleteVertex(graphElement data);
edgeT* AddEdge(graphElement source, graphElement destination);
void DeleteEdge(graphElement source, graphElement destination);
void PrintGraph();
void DiskIn();
void DiskOut();
void FindAllPaths(graphElement source, graphElement destenetion);
};
kommen ist es BFS i zu machen tryed zu ((. ich weiß, es ist nicht so gut :(
void graph::FindAllPaths(graphElement source, graphElement destenetion) {
vertexT *vertP;
vertexT *startP = NULL;
for (vertP = head; vertP != NULL; vertP = vertP->next) {
vertP->visited = 0;
if (vertP->data == source)
startP = vertP;
}
if (startP == NULL)
{
cout << "No such vertex";
return;
}
else
{
BFS(destenetion, startP);
}
}
void graph::BFS(graphElement destenetion, vertexT* startP) {
vertexT* current;
edgeT* edgeP;
vector<string>path;
queue.push(startP);
//startP->visited = true;
while (!queue.empty()) {
current = queue.front();
queue.pop();
if (current->data == destenetion)
copy(path.begin(), path.end(), ostream_iterator<string>(cout, " "));
for (edgeP = startP->edges; edgeP != NULL; edgeP = edgeP->next) {
//if (!edgeP->connectsTo->visited) {
queue.push(edgeP->connectsTo);
edgeP->connectsTo->visited = true;
path.push_back(edgeP->connectsTo->data);
// }
}
}
}
Es scheint, dass Ihr Titel irreführend ist. Ihre Frage ist über die Suche in der Grafik, nicht eine Kante zu löschen, richtig? – code11
oops yap du hast recht.Es war alte Frage ive getan selbst :) –
Sie können DFS anstelle von BFS verwenden Jedes Mal, wenn Sie den gewünschten Knoten erreichen, wird dieser Pfad eindeutig sein. –