/// <summary> /// Wyznacza ścieżkę powiekszającą o maksymalnej przepustowości /// </summary> /// <param name="g">Graf rezydualny</param> /// <param name="s">Wierzchołek źródłowy</param> /// <param name="t">Wierzchołek docelowy</param> /// <returns> /// Krotka (augmentingValue, augmentingFlow) składająca się z przepustowości wyznaczonej ścieżki /// i grafu opisującego tą ścieżkę /// </returns> /// <remarks> /// Jeśli ścieżka powiększająca nie istnieje, to zwracana jest krotka (0.0,null).<para/> /// Jeśli graf g jest typu <see cref="AdjacencyMatrixGraph"/> to wyznaczona ścieżka powiększająca p jest typu /// <see cref="AdjacencyListsGraph{HashTableAdjacencyList}"/>, /// w przeciwnym przypadku ścieżka p jest takiego samego typu jak graf g. /// </remarks> /// <seealso cref="MaxFlowGraphExtender"/> /// <seealso cref="ASD.Graphs"/> public static (double augmentingValue, Graph augmentingFlow) MaxFlowPath(this Graph g, int s, int t) { return(g.FindPath <EdgesMaxPriorityQueue>(s, t)); }
/// <summary> /// Wyznacza najkrótszą ścieżkę powiekszającą /// </summary> /// <param name="g">Graf rezydualny</param> /// <param name="s">Wierzchołek źródłowy</param> /// <param name="t">Wierzchołek docelowy</param> /// <returns> /// Krotka (augmentingValue, augmentingFlow) składająca się z przepustowości wyznaczonej ścieżki /// i grafu opisującego tą ścieżkę /// </returns> /// <remarks> /// Jeśli ścieżka powiększająca nie istnieje, to zwracana jest krotka (0.0,null).<para/> /// Jeśli graf g jest typu <see cref="AdjacencyMatrixGraph"/> to wyznaczona ścieżka powiększająca p /// jest typu <see cref="AdjacencyListsGraph{HashTableAdjacencyList}"/>, /// w przeciwnym przypadku ścieżka p jest takiego samego typu jak graf g. /// </remarks> /// <seealso cref="MaxFlowGraphExtender"/> /// <seealso cref="ASD.Graphs"/> public static (double augmentingValue, Graph augmentingFlow) BFPath(this Graph g, int s, int t) { return(g.FindPath <EdgesQueue>(s, t)); }