// -*- mode:C++ -*- #include #include #include #include #include #include"bench_tools.h" using namespace std; using namespace hugo; inline int numOfOnes(int n,int dim) { int s=0; for(int i=0;i>=1; } return s; } inline int numOfZeros(int n,int dim) { int s=dim; for(int i=0;i>=1; } return s; } template void bfsStlQueue(Graph &G,typename Graph::Node source) { GRAPH_TYPEDEF_FACTORY(Graph); using namespace std; typename Graph::NodeMap visited(G,false); queue Q; Q.push(source); visited[source]=true; do { Node n(Q.front()); Node m; Q.pop(); for(OutEdgeIt e(G,n);G.valid(e);G.next(e)) if(!visited[m=G.head(e)]) { Q.push(m); visited.set(m,true); } } while(!Q.empty()); } template void bfsOwnQueue(Graph &G,typename Graph::Node source) { GRAPH_TYPEDEF_FACTORY(Graph); using namespace std; typename Graph::NodeMap visited(G,false); int N=G.nodeNum(); vector Q(N); int Qh=0; int Qt=0; Q[Qh++]=source; visited.set(source,true); do { Node m; Node n=Q[Qt++]; for(OutEdgeIt e(G,n);G.valid(e);G.next(e)) if(!visited[m=G.head(e)]) { Q[Qh++]=m; visited.set(m,true); } } while(Qt!=Qh); } int main(int argc, char *argv[]) { // typedef ListGraph Graph; typedef SmartGraph Graph; ///\bug GRAPH_TYPEDEF_FACTORY(Graph); GRAPH_TYPEDEF_FACTORY_NOTYPENAME(Graph); Graph G; Timer T; if(argc!=2) { cout << "Usage: " << argv[0] << " dim\n"; return 1; } int dim=atoi(argv[1]); // cout << "Creating Hipercube ("<< (1< nodes; addBiDirHiperCube(G,dim,nodes); PrintTime("GENGRAPH",T); T.reset(); { for(int i=0;i<50000;i++) bfsStlQueue(G,nodes[0]); } PrintTime("BFS-STL",T); T.reset(); { for(int i=0;i<50000;i++) bfsOwnQueue(G,nodes[0]); } PrintTime("BFS-OWN",T); }