36 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
44 #define GNMGFID GIntBig
46 #define GNM_EDGE_DIR_BOTH 0 // bidirectional
47 #define GNM_EDGE_DIR_SRCTOTGT 1 // from source to target
48 #define GNM_EDGE_DIR_TGTTOSRC 2 // from target to source
50 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
52 typedef std::vector<GNMGFID> GNMVECTOR, *LPGNMVECTOR;
53 typedef const std::vector<GNMGFID> GNMCONSTVECTOR;
54 typedef const std::vector<GNMGFID> *LPGNMCONSTVECTOR;
55 typedef std::pair<GNMGFID, GNMGFID> EDGEVERTEXPAIR;
56 typedef std::vector<EDGEVERTEXPAIR> GNMPATH;
105 virtual void AddVertex(GNMGFID nFID);
111 virtual void DeleteVertex(GNMGFID nFID);
122 virtual void AddEdge(GNMGFID nConFID, GNMGFID nSrcFID, GNMGFID nTgtFID,
123 bool bIsBidir,
double dfCost,
double dfInvCost);
129 virtual void DeleteEdge(GNMGFID nConFID);
137 virtual void ChangeEdge(GNMGFID nFID,
double dfCost,
double dfInvCost);
144 virtual void ChangeBlockState(GNMGFID nFID,
bool bBlock);
151 virtual bool CheckVertexBlocked(GNMGFID nFID)
const;
160 virtual void ChangeAllBlockState(
bool bBlock =
false);
174 virtual GNMPATH DijkstraShortestPath(GNMGFID nStartFID, GNMGFID nEndFID);
196 virtual std::vector<GNMPATH> KShortestPaths(GNMGFID nStartFID,
197 GNMGFID nEndFID,
size_t nK);
212 virtual GNMPATH ConnectedComponents(
const GNMVECTOR &anEmittersIDs);
215 virtual void Clear();
235 DijkstraShortestPathTree(GNMGFID nFID,
236 const std::map<GNMGFID, GNMStdEdge> &mstEdges,
237 std::map<GNMGFID, GNMGFID> &mnPathTree);
240 DijkstraShortestPath(GNMGFID nStartFID, GNMGFID nEndFID,
241 const std::map<GNMGFID, GNMStdEdge> &mstEdges);
243 virtual LPGNMCONSTVECTOR GetOutEdges(GNMGFID nFID)
const;
244 virtual GNMGFID GetOppositVertex(GNMGFID nEdgeFID,
245 GNMGFID nVertexFID)
const;
246 virtual void TraceTargets(std::queue<GNMGFID> &vertexQueue,
247 std::set<GNMGFID> &markedVertIds,
248 GNMPATH &connectedIds);
251 std::map<GNMGFID, GNMStdVertex> m_mstVertices;
252 std::map<GNMGFID, GNMStdEdge> m_mstEdges;
256 #endif // __cplusplus