00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OMC_GRAPH_H
00020 #define OMC_GRAPH_H
00021
00022 #include "Core.h"
00023 #include <iostream>
00024 #include <vector>
00025 #include <algorithm>
00026 #include <climits>
00027
00028 namespace omc
00029 {
00030
00031 class OMCGraph
00032 {
00033
00034 friend std::ostream & operator<< (std::ostream &, const OMCGraph &);
00035
00036 public:
00037
00038 enum state { unvisited, discovered, finished };
00039
00040 OMCGraph (size_t);
00041
00042 ~OMCGraph () {};
00043
00044 size_t getNumVertices () const;
00045
00046 size_t getNumEdges () const;
00047
00048 void addEdge (index_t, index_t);
00049
00050 size_t diameter () const;
00051
00052 size_t numTriangles () const;
00053
00054 size_t num4gons () const;
00055
00056 size_t num5gons () const;
00057
00058 private:
00059 size_t m_numEdges;
00060
00061 std::vector <std::vector <bool> > m_AM;
00062
00063 };
00064
00066 inline OMCGraph::OMCGraph (size_t n)
00067 : m_numEdges (0), m_AM (n, std::vector<bool> (n, false))
00068 {
00069 for (index_t i=0; i<n; i++)
00070 m_AM[i][i] = true;
00071 }
00072
00074 inline size_t OMCGraph::getNumVertices () const {
00075 return m_AM.size();
00076 }
00077
00079 inline size_t OMCGraph::getNumEdges () const {
00080 return m_numEdges;
00081 }
00082
00084 inline void OMCGraph::addEdge (index_t i, index_t j) {
00085 if (i >= m_AM.size() || j >= m_AM.size())
00086 throw OMCException ("Invalid vertex", "OMCGraph::addEdge()");
00087
00088 m_numEdges++;
00089 m_AM[i][j] = m_AM[j][i] = true;
00090 }
00091
00092 };
00093
00094 #endif // OMC_GRAPH_H