Mercurial > defical
view defical-c/src/main.cpp @ 0:ebed2bd0d300
Initial import from svn. History be damned.
author | Edho P. Arief <me@myconan.net> |
---|---|
date | Fri, 02 Apr 2010 23:11:57 +0700 |
parents | |
children | 758381a85d76 |
line wrap: on
line source
#include "main.h" const uint32_t INTMAX=100000; const char separator[40]= "======================================="; int main(int argc, const char *argv[]) { uint32_t numVer,numDef,graphType,isAllI; int32_t start,end; string graphTypeS,algorithm; bool isAll; //defaults numVer=numDef=isAllI=INTMAX; isAllI=1; isAll=false; graphTypeS="x"; algorithm="x"; //end defaults dsr::Argument_helper ah; ah.set_author("Edho Prima Arief <me@myconan.net>"); ah.set_description("Calculates deficiency for various graphs."); ah.set_build_date("2009"); ah.set_name("defical"); ah.set_version("0.1"); ah.new_named_unsigned_int('n',"numver","","Number of vertices.",numVer); ah.new_named_unsigned_int('d',"numdef","","Number of deficiencies.",numDef); ah.new_named_string('g',"graph","","Type of graph.",graphTypeS); ah.new_named_string('a',"algorithm","","Choice of algorithm.",algorithm); ah.new_named_unsigned_int('c',"complete","","Don't stop on found.",isAllI); ah.process(argc,argv); if(isAllI==1) isAll=true; if(graphTypeS=="wheel") graphType=3; else if(graphTypeS=="fan") graphType=4; else if(graphTypeS=="doublefan") graphType=5; else { printf("Invalid graph type. Accepted: wheel, fan, doublefan.\n"); return 1; } if(numVer<5 || numVer>=INTMAX) { printf("Number of vertices must be more than 5 (or less than %d).\n",INTMAX); return 1; } if(numDef>=INTMAX) { printf("Ha ha ha funny. Just give up (number of deficiencies must be less than %d.\n",INTMAX); return 1; } if(algorithm!="backtrack") { printf("Invalid algorithm specified.\n"); return 1; } printf(separator); printf("\nNumber of vertices: %d\n",numVer); printf("Number of deficiencies: %d\n",numDef); cout << "Graph type: " << graphTypeS << endl; cout << "Algorithm: " << algorithm << endl; cout << separator << endl; gettime *mytime=new gettime(); cout << "[I] " << mytime->time_v << ": Started" << endl; cout << separator << endl; if(algorithm=="backtrack") { start=1; end=(numVer+numDef+1)/2; bool isFinished=false; #ifdef _OPENMP #pragma omp parallel for num_threads(3) #endif for(int32_t i=start;i<=end;i++){ if(!isFinished){ bt::backtrack *bt1=new bt::backtrack(graphType,numVer,numDef,i,isAll); bt1->Walk(); if(!isFinished) { if(bt1->IsSemt) { if(!isAll) isFinished=true; gettime *mytime=new gettime(); printf("[F] %s: Found\n%s\n%s%s\n",mytime->time_v,separator,bt1->Result.c_str(),separator); bt1->IsSemt=false; } else { if(!isFinished) { gettime *mytime=new gettime(); printf("[N] %s: Unable to construct with first label %d\n",mytime->time_v,i); } } } } } } return 0; }