📄 lib_points.c
字号:
/*********************************************************************** File: lib_points.c Rev: a-1 Date: 01/22/2000 Copyright (c) 2000, 2001 by Martin Zachariasen************************************************************************ Convert OR-LIBRARY or TSPLIB file into a "clean" set of points that can be read by "rfst" or "efst". The coordinates themselves are just dumped exactly as they appear in the instance file. It is a filter with one optional parameter that specifies the instance number in an OR-LIBRARY file. The program identifies the instance file type automatically.************************************************************************ Modification Log: a-1: 01/22/2000 martinz : Created.************************************************************************/#include "steiner.h"/* * Global Routines */int main (int, char **);/* * Local Routines */static void decode_params (int, char **);static void usage (void);/* * Local Variables */static char * me;static int orlib_instance = 1;/* * The main routine lib_points utility. */ intmain (int argc,char ** argv){int i;int j;int n;int num_instances;bool found;char buf [256]; setbuf (stdout, NULL); decode_params (argc, argv); scanf ("%s", buf); /* Is this a TSPLIB or OR-LIBRARY file? */ if (strncmp (buf, "NAME", 4) EQ 0) { /* This appears to be a TSPLIB file */ /* Search for dimension field */ found = FALSE; while (NOT feof (stdin)) { scanf ("%s", buf); if (strncmp (buf, "DIMENSION:", 10) EQ 0) { found = TRUE; break; } if (strncmp (buf, "DIMENSION", 9) EQ 0) { scanf ("%s", buf); /* read the : */ found = TRUE; break; } } if (NOT found) { fprintf (stderr,"\nError: Cannot find dimension.\n\n"); exit (1); } scanf ("%s", buf); n = atoi (buf); if (n < 1) { fprintf (stderr,"\nError: Bad dimension.\n\n"); exit (1); } /* Search for one of the valid coordinate types */ found = FALSE; while (NOT feof (stdin)) { scanf ("%s", buf); if ((strncmp (buf, "EUC_2D", 6) EQ 0) OR (strncmp (buf, "MAX_2D", 6) EQ 0) OR (strncmp (buf, "CEIL_2D", 7) EQ 0) OR (strncmp (buf, "GEO", 3) EQ 0) OR (strncmp (buf, "ATT", 3) EQ 0)) { found = TRUE; break; } } if (NOT found) { fprintf (stderr, "\nError: TSPLIB input file is not\n" "a 2-D plane instance.\n\n"); exit (1); } /* Search for the coordinate section */ found = FALSE; while (NOT feof (stdin)) { scanf ("%s", buf); if (strncmp (buf, "NODE_COORD_SECTION", 18) EQ 0) { found = TRUE; break; } } if (NOT found) { fprintf (stderr, "\nError: Cannot find node coordinates.\n\n"); exit (1); } /* Now start dumping out the coordinates */ for (i = 1; i <= n; i++) { scanf ("%s", buf); if (i NE atoi (buf)) { fprintf (stderr, "\nError: Bad node number.\n\n"); exit (1); } scanf ("%s", buf); /* x-coordinate */ printf ("%s ", buf); scanf ("%s", buf); /* y-coordinate */ printf ("%s\n", buf); } } else { num_instances = atoi (buf); if (num_instances < 1) { fprintf (stderr, "\nError: Input file is neither OR-LIBRARY\n" "or TSPLIB file.\n\n"); exit (1); } if (orlib_instance > num_instances) { fprintf (stderr, "\nError: Specified instance number (%d)\n" "does not exist in OR-LIBRARY file.\n\n", orlib_instance); exit (1); } /* Now dump out the correct instance */ for (j = 1; j <= orlib_instance; j++) { scanf ("%s", buf); n = atoi (buf); if (n < 1) { fprintf (stderr, "\nError: Bad number of points in instance %d.\n\n", j); exit (1); } if (j EQ orlib_instance) { for (i = 1; i <= n; i++) { scanf ("%s", buf); printf ("%s ", buf); scanf ("%s", buf); printf ("%s\n", buf); } } else { for (i = 1; i <= n; i++) { scanf ("%s%s", buf, buf); } } } } exit (0);}/* * This routine decodes the various command-line arguments. */ static voiddecode_params (int argc,char ** argv){char * ap;char c; --argc; me = *argv++; while (argc > 0) { ap = *argv++; if (*ap NE '-') { orlib_instance = atoi (ap); if (orlib_instance < 1) { usage (); break; } } else { usage (); break; } --argc; }}/* * This routine prints out the proper usage and exits. */static char * arg_doc [] = { "", "\tN\tRead instance number N from OR-LIBRARY file.", "\t\t(default: 1).", "", NULL}; static voidusage (void){char ** pp;char * p; (void) fprintf (stderr, "\nUsage: %s [N]\n", me); pp = &arg_doc [0]; while ((p = *pp++) NE NULL) { (void) fprintf (stderr, "%s\n", p); } exit (1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -