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
00046 char trash [MAX_TRASH_LENGTH];
00047
00048 fscanf (__f, "%[ \t:\n]", trash);
00049 fscanf (__f, "%[^:\n]", __buff);
00050 fgetc (__f);
00051 }
00052
00053 static void getLine (FILE * __f, char * __buff)
00054 {
00055
00056 char trash [MAX_TRASH_LENGTH];
00057
00058 fscanf (__f, "%[ \t:\n]", trash);
00059 fscanf (__f, "%[^\n]", __buff);
00060 }
00061
00062 static void loadBestRoute (FILE * __f)
00063 {
00064
00065 opt_route.clear ();
00066
00067 for (unsigned i = 0; i < numNodes; i ++)
00068 {
00069 Node node;
00070 fscanf (__f, "%u", & node);
00071 opt_route.push_back (node - 1);
00072 }
00073 int d;
00074 fscanf (__f, "%d", & d);
00075 }
00076
00077 void loadOptimumRoute (const char * __filename)
00078 {
00079
00080 FILE * f = fopen (__filename, "r");
00081
00082 if (f)
00083 {
00084
00085 printf ("Loading '%s'.\n", __filename);
00086
00087 char field [MAX_FIELD_LENGTH];
00088
00089 getNextField (f, field);
00090 assert (strstr (field, "NAME"));
00091 getNextField (f, field);
00092
00093
00094 getNextField (f, field);
00095 assert (strstr (field, "COMMENT"));
00096 getLine (f, field);
00097
00098
00099 getNextField (f, field);
00100 assert (strstr (field, "TYPE"));
00101 getNextField (f, field);
00102
00103
00104 getNextField (f, field);
00105 assert (strstr (field, "DIMENSION"));
00106 getNextField (f, field);
00107
00108 numNodes = atoi (field);
00109
00110 getNextField (f, field);
00111 assert (strstr (field, "TOUR_SECTION"));
00112 loadBestRoute (f);
00113
00114 getNextField (f, field);
00115 assert (strstr (field, "EOF"));
00116
00117
00118 printf ("The length of the best route is %u.\n", length (opt_route));
00119 }
00120 else
00121 {
00122
00123 fprintf (stderr, "Can't open '%s'.\n", __filename);
00124 exit (1);
00125 }
00126 }
00127
00128 void loadOptimumRoute (eoParser & __parser)
00129 {
00130
00131
00132
00133 eoValueParam <std :: string> param ("", "optimumTour", "Optimum tour") ;
00134 __parser.processParam (param) ;
00135 if (strlen (param.value ().c_str ()))
00136 loadOptimumRoute (param.value ().c_str ());
00137 else
00138 opt_route.fitness (0);
00139 }
00140
00141 Route opt_route;
00142
00143