File: codimoneconnectedness.cpp

package info (click to toggle)
gfan 0.5%2Bdfsg-5
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,296 kB
  • ctags: 5,612
  • sloc: cpp: 39,675; makefile: 453; sh: 1
file content (38 lines) | stat: -rw-r--r-- 1,213 bytes parent folder | download | duplicates (6)
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
#include "codimoneconnectedness.h"
#include "graph.h"
#include "log.h"

#include <set>
#include <iostream>


void CodimOneConnectednessTester::insertFacetOrbit(IntegerVectorList const &ridges)
{
  data.push_back(ridges);
}


bool CodimOneConnectednessTester::isConnected()const
{
  set<IntegerVector> allRidges;
  for(list<IntegerVectorList>::const_iterator i=data.begin();i!=data.end();i++)
    for(IntegerVectorList::const_iterator j=i->begin();j!=i->end();j++)
      allRidges.insert(*j);

  vector<IntegerVector> allRidges2;//(allRidges.size());
  for(set<IntegerVector>::const_iterator i=allRidges.begin();i!=allRidges.end();i++)allRidges2.push_back(*i);

  int nRidges=allRidges2.size();
  int nFacets=data.size();

  Graph g(nFacets+nRidges);

  int facetIndex=0;
  for(list<IntegerVectorList>::const_iterator i=data.begin();i!=data.end();i++,facetIndex++)
    for(IntegerVectorList::const_iterator j=i->begin();j!=i->end();j++)
      g.addEdge(facetIndex,nFacets+(lower_bound(allRidges2.begin(),allRidges2.end(),*j)-allRidges2.begin()));

  int diameter=g.diameter();
  log2 cerr << "Diameter " << diameter << " nFacets " << nFacets << " nRidges " << nRidges << endl;
  return diameter<nFacets+nRidges;
}