00001 // Copyright (C) 2005 Alexander Ushakov 00002 // Contents: Definition of class QuadEquationTranformationGraph 00003 // 00004 // Principal Authors: Alexander Ushakov 00005 // 00006 // Revision History: 00007 // 00008 00009 00010 #ifndef _QuadEquationTranformationGraph_h_ 00011 #define _QuadEquationTranformationGraph_h_ 00012 00013 00014 #include "Equation.h" 00015 00016 00017 //---------------------------------------------------------------------------// 00018 //---------------------- QuadEquationTranformationGraph ---------------------// 00019 //---------------------------------------------------------------------------// 00020 00021 00022 class QuadEquationTranformationGraph 00023 { 00025 // // 00026 // Constructors: // 00027 // // 00029 00030 public: 00031 00032 QuadEquationTranformationGraph( const Equation& eq ); 00033 00034 00036 // // 00037 // Accessors: // 00038 // // 00040 00041 public: 00042 00043 void extend( ); 00044 00045 00047 const IntLabeledGraph& getGraph( ) const; 00048 00049 00051 bool isDone( ) const; 00052 00053 00055 bool solutionFound( ) const; 00056 00058 // // 00059 // I/O: // 00060 // // 00062 00063 private: 00064 00065 00067 // // 00068 // Internal functions: // 00069 // // 00071 00072 private: 00073 00075 set< Word > getNeighbours( const Word& eq ); 00076 00077 00079 Word applyAdjointTransformation( const Word& eq , int x , const Word& im ); 00080 00081 00083 bool isTrivialSolution( const Word& e ) const; 00084 00085 00087 // // 00088 // Data members: // 00089 // // 00091 00092 private: 00093 00095 const Equation theEquation; 00096 00097 00099 00104 IntLabeledGraph theGraph; 00105 00106 00108 map< Word , int > processedEquations; 00109 00110 00112 map< Word , int > equationsInProcess; 00113 00114 00116 bool hasSolution; 00117 00118 }; 00119 00120 00121 #endif