1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
/*
* $Revision: 2523 $
*
* last checkin:
* $Author: gutwenger $
* $Date: 2012-07-02 20:59:27 +0200 (Mon, 02 Jul 2012) $
***************************************************************/
/** \file
* \brief Declaration of base class of shortest path algorithms
* including some useful functions dealing with
* shortest paths flow (generater, checker).
*
* \author Gunnar W. Klau
*
* \par License:
* This file is part of the Open Graph Drawing Framework (OGDF).
*
* \par
* Copyright (C)<br>
* See README.txt in the root directory of the OGDF installation for details.
*
* \par
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2 or 3 as published by the Free Software Foundation;
* see the file LICENSE.txt included in the packaging of this file
* for details.
*
* \par
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* \par
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* \see http://www.gnu.org/copyleft/gpl.html
***************************************************************/
#ifdef _MSC_VER
#pragma once
#endif
#ifndef OGDF_SHORTEST_PATH_MODULE_H
#define OGDF_SHORTEST_PATH_MODULE_H
#include <ogdf/basic/Graph.h>
namespace ogdf {
class OGDF_EXPORT ShortestPathModule
{
public:
ShortestPathModule() { }
virtual ~ShortestPathModule() {}
// computes shortest paths
// Precond.:
// returns true iff a feasible min-cost flow exists
virtual bool call(
const Graph &G, // directed graph
const node s, // source node
const EdgeArray<int> &length, // length of an edge
NodeArray<int> &d, // contains shortest path distances after call
NodeArray<edge> &pi
) = 0;
protected:
//
// static functions
//
// generates a shortest path problem instance with n nodes and m+n edges
/*
static void generateProblem(
Graph &G,
int n,
int m,
EdgeArray<int> &lowerBound,
EdgeArray<int> &upperBound,
EdgeArray<int> &cost,
NodeArray<int> &supply);
// checks if a given min-cost flow problem instance satisfies
// the preconditions
//
// lowerBound[e] <= upperBound[e] for all edges e
// cost[e] >= 0 for all edges e
// sum over all supply[v] = 0
static bool checkProblem(
const Graph &G,
const EdgeArray<int> &lowerBound,
const EdgeArray<int> &upperBound,
const EdgeArray<int> &cost,
const NodeArray<int> &supply);
// checks if a computed flow is a feasible solution to the given problem
// instance, i.e., checks if
// lowerBound[e] <= flow[e] <= upperBound[e]
// sum flow[e], e is outgoing edge of v -
// sum flow[e], e is incoming edge of v = supply[v] for each v
// returns true iff the solution is feasible and in value the value of
// the computed flow
static bool checkComputedFlow(
Graph &G,
EdgeArray<int> &lowerBound,
EdgeArray<int> &upperBound,
EdgeArray<int> &cost,
NodeArray<int> &supply,
EdgeArray<int> &flow,
int &value);
static bool checkComputedFlow(
Graph &G,
EdgeArray<int> &lowerBound,
EdgeArray<int> &upperBound,
EdgeArray<int> &cost,
NodeArray<int> &supply,
EdgeArray<int> &flow)
{
int value;
return checkComputedFlow(
G,lowerBound,upperBound,cost,supply,flow,value);
}
*/
};
} // end namespace ogdf
#endif
|