Mercurial > defical
comparison 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 | 
   comparison
  equal
  deleted
  inserted
  replaced
| -1:000000000000 | 0:ebed2bd0d300 | 
|---|---|
| 1 #include "main.h" | |
| 2 | |
| 3 const uint32_t INTMAX=100000; | |
| 4 const char separator[40]= "======================================="; | |
| 5 | |
| 6 int main(int argc, const char *argv[]) | |
| 7 { | |
| 8 uint32_t numVer,numDef,graphType,isAllI; | |
| 9 int32_t start,end; | |
| 10 string graphTypeS,algorithm; | |
| 11 bool isAll; | |
| 12 //defaults | |
| 13 numVer=numDef=isAllI=INTMAX; | |
| 14 isAllI=1; | |
| 15 isAll=false; | |
| 16 graphTypeS="x"; | |
| 17 algorithm="x"; | |
| 18 //end defaults | |
| 19 dsr::Argument_helper ah; | |
| 20 ah.set_author("Edho Prima Arief <me@myconan.net>"); | |
| 21 ah.set_description("Calculates deficiency for various graphs."); | |
| 22 ah.set_build_date("2009"); | |
| 23 ah.set_name("defical"); | |
| 24 ah.set_version("0.1"); | |
| 25 ah.new_named_unsigned_int('n',"numver","","Number of vertices.",numVer); | |
| 26 ah.new_named_unsigned_int('d',"numdef","","Number of deficiencies.",numDef); | |
| 27 ah.new_named_string('g',"graph","","Type of graph.",graphTypeS); | |
| 28 ah.new_named_string('a',"algorithm","","Choice of algorithm.",algorithm); | |
| 29 ah.new_named_unsigned_int('c',"complete","","Don't stop on found.",isAllI); | |
| 30 ah.process(argc,argv); | |
| 31 if(isAllI==1) | |
| 32 isAll=true; | |
| 33 if(graphTypeS=="wheel") | |
| 34 graphType=3; | |
| 35 else if(graphTypeS=="fan") | |
| 36 graphType=4; | |
| 37 else if(graphTypeS=="doublefan") | |
| 38 graphType=5; | |
| 39 else | |
| 40 { | |
| 41 printf("Invalid graph type. Accepted: wheel, fan, doublefan.\n"); | |
| 42 return 1; | |
| 43 } | |
| 44 if(numVer<5 || numVer>=INTMAX) | |
| 45 { | |
| 46 printf("Number of vertices must be more than 5 (or less than %d).\n",INTMAX); | |
| 47 return 1; | |
| 48 } | |
| 49 if(numDef>=INTMAX) | |
| 50 { | |
| 51 printf("Ha ha ha funny. Just give up (number of deficiencies must be less than %d.\n",INTMAX); | |
| 52 return 1; | |
| 53 } | |
| 54 if(algorithm!="backtrack") | |
| 55 { | |
| 56 printf("Invalid algorithm specified.\n"); | |
| 57 return 1; | |
| 58 } | |
| 59 printf(separator); | |
| 60 printf("\nNumber of vertices: %d\n",numVer); | |
| 61 printf("Number of deficiencies: %d\n",numDef); | |
| 62 cout << "Graph type: " << graphTypeS << endl; | |
| 63 cout << "Algorithm: " << algorithm << endl; | |
| 64 cout << separator << endl; | |
| 65 gettime *mytime=new gettime(); | |
| 66 cout << "[I] " << mytime->time_v << ": Started" << endl; | |
| 67 cout << separator << endl; | |
| 68 if(algorithm=="backtrack") | |
| 69 { | |
| 70 start=1; | |
| 71 end=(numVer+numDef+1)/2; | |
| 72 bool isFinished=false; | |
| 73 #ifdef _OPENMP | |
| 74 #pragma omp parallel for num_threads(3) | |
| 75 #endif | |
| 76 for(int32_t i=start;i<=end;i++){ | |
| 77 if(!isFinished){ | |
| 78 bt::backtrack *bt1=new bt::backtrack(graphType,numVer,numDef,i,isAll); | |
| 79 bt1->Walk(); | |
| 80 if(!isFinished) | |
| 81 { | |
| 82 if(bt1->IsSemt) | |
| 83 { | |
| 84 if(!isAll) | |
| 85 isFinished=true; | |
| 86 gettime *mytime=new gettime(); | |
| 87 printf("[F] %s: Found\n%s\n%s%s\n",mytime->time_v,separator,bt1->Result.c_str(),separator); | |
| 88 bt1->IsSemt=false; | |
| 89 } | |
| 90 else { | |
| 91 if(!isFinished) | |
| 92 { | |
| 93 gettime *mytime=new gettime(); | |
| 94 printf("[N] %s: Unable to construct with first label %d\n",mytime->time_v,i); | |
| 95 } | |
| 96 } | |
| 97 } | |
| 98 } | |
| 99 } | |
| 100 } | |
| 101 return 0; | |
| 102 } | 
