Die Lösung kann gefunden werden, indem das Konzept von Kosarajus Algorithmus für stark verbundene Komponenten verwendet wird.Die Idee basiert auf folgender Tatsache:
Wenn es einen Eckpunkt (oder Scheitelpunkte) gibt, von denen alle anderen Eckpunkte erreichbar sind, dann hätte dieser Eckpunkt die maximale Endzeit in einem DFS-Traversal. So , wäre die Lösung wie folgt aussehen:
// Utility function to find mother vertex
//(vertex from which all other vertices are reachable)
public void findMotherVertex() {
int motherVertex=0;
for (int i=0;i<G.V();i++) { //G.V() would return the no. of vertices in the graph
if (!marked[i]) { //marked - boolean array storing visited vertices
dfs(i);
motherVertex=i;
}
}
//Check for this vertex if all other vertices have been already visited
//Otherwise no mother vertex exists
for (int i=0;i<G.V();i++) {
if (!marked[i])
return false;
}
System.out.println("Desired vertex is : " + motherVertex);
}
Der obige Algorithmus O (V + E) Zeit in Anspruch nimmt, das Problem zu lösen.
Auf einem dichten Graphen können Sie eine Floyd-Warshall machen und nach einer Reihe von allen suchen. – dasblinkenlight
Ist diese Frage nützlich? http://math.stackexchange.com/questions/99237 –
@Jake ist die Post, die nach einem Scheitelpunkt fragt, der von jedem anderen Scheitelpunkt erreicht werden kann (wie durch den Titel angedeutet) oder einem Scheitelpunkt, von dem jeder andere Scheitelpunkt erreicht werden kann (wie in der Post selbst)? – bytefire