00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "opt_route.h"
00038
00039 #define MAX_TRASH_LENGTH 1000
00040 #define MAX_FIELD_LENGTH 1000
00041 #define MAX_LINE_LENGTH 1000
00042
00043 static void getNextField (FILE * __f, char * __buff) {
00044
00045 char trash [MAX_TRASH_LENGTH];
00046
00047 fscanf (__f, "%[ \t:\n]", trash);
00048 fscanf (__f, "%[^:\n]", __buff);
00049 fgetc (__f);
00050 }
00051
00052 static void getLine (FILE * __f, char * __buff) {
00053
00054 char trash [MAX_TRASH_LENGTH];
00055
00056 fscanf (__f, "%[ \t:\n]", trash);
00057 fscanf (__f, "%[^\n]", __buff);
00058 }
00059
00060 static void loadBestRoute (FILE * __f) {
00061
00062 opt_route.clear ();
00063
00064 for (unsigned i = 0; i < numNodes; i ++) {
00065 Node node;
00066 fscanf (__f, "%u", & node);
00067 opt_route.push_back (node - 1);
00068 }
00069 int d;
00070 fscanf (__f, "%d", & d);
00071 }
00072
00073 void loadOptimumRoute (const char * __filename) {
00074
00075 FILE * f = fopen (__filename, "r");
00076
00077 if (f) {
00078
00079 printf ("Loading '%s'.\n", __filename);
00080
00081 char field [MAX_FIELD_LENGTH];
00082
00083 getNextField (f, field);
00084 assert (strstr (field, "NAME"));
00085 getNextField (f, field);
00086
00087
00088 getNextField (f, field);
00089 assert (strstr (field, "COMMENT"));
00090 getLine (f, field);
00091
00092
00093 getNextField (f, field);
00094 assert (strstr (field, "TYPE"));
00095 getNextField (f, field);
00096
00097
00098 getNextField (f, field);
00099 assert (strstr (field, "DIMENSION"));
00100 getNextField (f, field);
00101
00102 numNodes = atoi (field);
00103
00104 getNextField (f, field);
00105 assert (strstr (field, "TOUR_SECTION"));
00106 loadBestRoute (f);
00107
00108 getNextField (f, field);
00109 assert (strstr (field, "EOF"));
00110
00111
00112 printf ("The length of the best route is %u.\n", length (opt_route));
00113 }
00114 else {
00115
00116 fprintf (stderr, "Can't open '%s'.\n", __filename);
00117 exit (1);
00118 }
00119 }
00120
00121 void loadOptimumRoute (eoParser & __parser) {
00122
00123
00124
00125 eoValueParam <std :: string> param ("", "optimumTour", "Optimum tour") ;
00126 __parser.processParam (param) ;
00127 if (strlen (param.value ().c_str ()))
00128 loadOptimumRoute (param.value ().c_str ());
00129 else
00130 opt_route.fitness (0);
00131 }
00132
00133 Route opt_route;
00134
00135