Open
Graph Drawing
Framework

 v.2012.05
 

LocalBiconnectedMerger.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  *
00004  * last checkin:
00005  *   $Author: gutwenger $
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $
00007  ***************************************************************/
00008 
00042 #include <ogdf/energybased/multilevelmixer/MultilevelBuilder.h>
00043 #include <ogdf/basic/HashArray.h>
00044 
00045 #ifdef _MSC_VER
00046 #pragma once
00047 #endif
00048 
00049 #ifndef OGDF_LOCAL_BICONNECTED_MERGER_H
00050 #define OGDF_LOCAL_BICONNECTED_MERGER_H
00051 
00052 namespace ogdf {
00053 
00054 class OGDF_EXPORT LocalBiconnectedMerger : public MultilevelBuilder
00055 {
00056 private:
00057     double m_levelSizeFactor;
00058     NodeArray<node> m_substituteNodes;
00059     NodeArray<bool> m_isCut;
00060     HashArray<int, int> m_realNodeMarks;
00061 
00062     void initCuts(Graph &G);
00063     int realNodeMark(int index);
00064 
00067     bool buildOneLevel(MultilevelGraph &MLG);
00068     bool doMerge(MultilevelGraph &MLG, node parent, node mergePartner, int level);
00069     bool doMergeIfPossible(Graph &G, MultilevelGraph &MLG, node parent, node mergePartner, int level);
00070     bool canMerge(Graph &G, node parent, node mergePartner);
00071     bool canMerge(Graph &G, node parent, node mergePartner, int testStrength);
00072 
00073 public:
00075     LocalBiconnectedMerger();
00078     void setFactor(double factor);
00079 };
00080 
00081 } // namespace ogdf
00082 
00083 #endif