static void Read_FIXED_EDGES_SECTION() { Node *Ni, *Nj, *N, *NPrev = 0, *NNext; int i, j, Count = 0; CheckSpecificationPart(); if (!FirstNode) CreateNodes(); if (ProblemType == HPP) Dimension--; if (!fscanint(ProblemFile, &i)) i = -1; while (i != -1) { if (i <= 0 || i > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(FIXED_EDGES_SECTION) Node number out of range: %d", i); fscanint(ProblemFile, &j); if (j <= 0 || j > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(FIXED_EDGES_SECTION) Node number out of range: %d", j); if (i == j) eprintf("(FIXED_EDGES_SECTION) Illegal edge: %d to %d", i, j); Ni = &NodeSet[i]; Nj = &NodeSet[ProblemType == ATSP ? j + Dimension / 2 : j]; if (!Ni->FixedTo1 || Ni->FixedTo1 == Nj) Ni->FixedTo1 = Nj; else if (!Ni->FixedTo2 || Ni->FixedTo2 == Nj) Ni->FixedTo2 = Nj; else eprintf("(FIXED_EDGES_SECTION) Illegal fix: %d to %d", i, j); if (!Nj->FixedTo1 || Nj->FixedTo1 == Ni) Nj->FixedTo1 = Ni; else if (!Nj->FixedTo2 || Nj->FixedTo2 == Ni) Nj->FixedTo2 = Ni; else eprintf("(FIXED_EDGES_SECTION) Illegal fix: %d to %d", i, j); /* Cycle check */ N = Ni; Count = 0; do { NNext = N->FixedTo1 != NPrev ? N->FixedTo1 : N->FixedTo2; NPrev = N; Count++; } while ((N = NNext) && N != Ni); if (N == Ni && Count != Dimension) eprintf("(FIXED_EDGES_SECTION) Illegal fix: %d to %d", i, j); if (!fscanint(ProblemFile, &i)) i = -1; } if (ProblemType == HPP) Dimension++; }
static void Read_EDGE_DATA_SECTION() { Node *Ni, *Nj; int i, j; CheckSpecificationPart(); if (!EdgeDataFormat) eprintf("Missing EDGE_DATA_FORMAT specification"); if (!FirstNode) CreateNodes(); if (ProblemType == HPP) Dimension--; if (!fscanint(ProblemFile, &i)) i = -1; while (i != -1) { if (i <= 0 || i > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", i); fscanint(ProblemFile, &j); if (j == -1 && !strcmp(EdgeDataFormat, "EDGE_LIST")) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", -1); while (j != -1) { printff("i = %d, j = %d\n", i, j); if (j <= 0 || j > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", j); if (i == j) eprintf("(EDGE_DATA_SECTION) Illegal edge: %d to %d", i, j); if (ProblemType == ATSP) { i += Dimension / 2; j += Dimension / 2; } Ni = &NodeSet[i]; Nj = &NodeSet[j]; AddCandidate(Ni, Nj, 0, 1); if (ProblemType != ATSP) AddCandidate(Nj, Ni, 0, 1); if (!strcmp(EdgeDataFormat, "EDGE_LIST") || !fscanint(ProblemFile, &j)) j = -1; } if (!fscanint(ProblemFile, &i)) i = -1; } if (ProblemType == HPP) Dimension++; Distance = Distance_1; }
static void Read_FIXED_EDGES_SECTION() { Node *Ni, *Nj; int i, j; CheckSpecificationPart(); if (!FirstNode) CreateNodes(); if (ProblemType == HPP) Dimension--; if (!fscanint(ProblemFile, &i)) i = -1; while (i != -1) { if (i <= 0 || i > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(FIXED_EDGES_SECTION) Node number out of range: %d", i); fscanint(ProblemFile, &j); if (j <= 0 || j > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(FIXED_EDGES_SECTION) Node number out of range: %d", j); if (i == j) eprintf("(FIXED_EDGES_SECTION) Illgal edge: %d to %d", i, j); if (ProblemType == ATSP) i += Dimension / 2; Ni = &NodeSet[i]; Nj = &NodeSet[j]; if (!Ni->FixedTo1) Ni->FixedTo1 = Nj; else if (!Ni->FixedTo2) Ni->FixedTo2 = Nj; else eprintf("(FIXED_EDGES_SECTION) Illegal fix: %d to %d", i, j); if (!Nj->FixedTo1) Nj->FixedTo1 = Ni; else if (!Nj->FixedTo2) Nj->FixedTo2 = Ni; else eprintf("(FIXED_EDGES_SECTION) Illegal fix: %d to %d", i, j); if (!fscanint(ProblemFile, &i)) i = -1; } if (ProblemType == HPP) Dimension++; }
int ReadPenalties() { int i, Id; Node *Na, *Nb = 0; static int PenaltiesRead = 0; if(ReadPenaltiesStatic) { PenaltiesRead = 0; ReadPenaltiesStatic = 0; } if (PiFileName == 0) return 0; if (PenaltiesRead || strcmp(PiFileName, "0") == 0) return PenaltiesRead = 1; if (!(PiFile = fopen(PiFileName, "r"))) return 0; if (TraceLevel >= 1) printff("Reading PI_FILE: \"%s\" ... ", PiFileName); fscanint(PiFile, &i); if (i != Dimension) eprintf("PI_FILE \"%s\" does not match problem", PiFileName); fscanint(PiFile, &Id); assert(Id >= 1 && Id <= Dimension); FirstNode = Na = &NodeSet[Id]; fscanint(PiFile, &Na->Pi); for (i = 2; i <= Dimension; i++) { fscanint(PiFile, &Id); assert(Id >= 1 && Id <= Dimension); Nb = &NodeSet[Id]; fscanint(PiFile, &Nb->Pi); Nb->Pred = Na; Na->Suc = Nb; Na = Nb; } FirstNode->Pred = Nb; Nb->Suc = FirstNode; fclose(PiFile); if (TraceLevel >= 1) printff("done\n"); return PenaltiesRead = 1; }
static void Read_NODE_COORD_SECTION() { Node *N; int Id, i; CheckSpecificationPart(); if (CoordType != TWOD_COORDS && CoordType != THREED_COORDS) eprintf("NODE_COORD_SECTION conflicts with NODE_COORD_TYPE: %s", NodeCoordType); if (!FirstNode) CreateNodes(); N = FirstNode; do N->V = 0; while ((N = N->Suc) != FirstNode); if (ProblemType == HPP) Dimension--; for (i = 1; i <= Dimension; i++) { if (!fscanint(ProblemFile, &Id)) eprintf("Missing nodes in NODE_COORD_SECTION"); if (Id <= 0 || Id > Dimension) eprintf("(NODE_COORD_SECTION) Node number out of range: %d", Id); N = &NodeSet[Id]; if (N->V == 1) eprintf("(NODE_COORD_SECTION) Node number occurs twice: %d", N->Id); N->V = 1; if (!fscanf(ProblemFile, "%lf", &N->X)) eprintf("Missing X-coordinate in NODE_COORD_SECTION"); if (!fscanf(ProblemFile, "%lf", &N->Y)) eprintf("Missing Y-coordinate in NODE_COORD_SECTION"); if (CoordType == THREED_COORDS && !fscanf(ProblemFile, "%lf", &N->Z)) eprintf("Missing Z-coordinate in NODE_COORD_SECTION"); if (Name && !strcmp(Name, "d657")) { N->X = (float) N->X; N->Y = (float) N->Y; } } N = FirstNode; do if (!N->V && N->Id <= Dimension) break; while ((N = N->Suc) != FirstNode); if (!N->V) eprintf("(NODE_COORD_SECTION) No coordinates given for node %d", N->Id); if (ProblemType == HPP) Dimension++; }
int ReadCandidates(int MaxCandidates) { FILE *CandidateFile = 0; Node *From, *To; int Dimension, i, j, f, Id, Alpha, Count; if (CandidateFiles == 0 || (CandidateFiles == 1 && !(CandidateFile = fopen(CandidateFileName[0], "r")))) return 0; Dimension = ProblemType != ATSP ? DimensionSaved : 2 * DimensionSaved; for (f = 0; f < CandidateFiles; f++) { if (CandidateFiles >= 2 && !(CandidateFile = fopen(CandidateFileName[f], "r"))) eprintf("Cannot open CANDIDATE_FILE: \"%s\"", CandidateFileName[f]); if (TraceLevel >= 1) printff("Reading CANDIDATE_FILE: \"%s\" ... ", CandidateFileName[f]); fscanint(CandidateFile, &i); if (i != Dimension) eprintf("CANDIDATE_FILE \"%s\" does not match problem", CandidateFileName[f]); for (i = 1; i <= Dimension; i++) { fscanint(CandidateFile, &Id); assert(Id >= 1 && Id <= Dimension); From = &NodeSet[Id]; fscanint(CandidateFile, &Id); assert(Id >= 0 && Id <= Dimension); if (Id > 0) From->Dad = &NodeSet[Id]; assert(From != From->Dad); fscanint(CandidateFile, &Count); assert(Count >= 0 && Count < Dimension); if (!From->CandidateSet) assert(From->CandidateSet = (Candidate *) calloc(Count + 1, sizeof(Candidate))); for (j = 0; j < Count; j++) { fscanint(CandidateFile, &Id); assert(Id >= 1 && Id <= Dimension); To = &NodeSet[Id]; fscanint(CandidateFile, &Alpha); AddCandidate(From, To, D(From, To), Alpha); } } fclose(CandidateFile); if (TraceLevel >= 1) printff("done\n"); } ResetCandidateSet(); if (MaxCandidates > 0) TrimCandidateSet(MaxCandidates); return 1; }
static void Read_DISPLAY_DATA_SECTION() { Node *N; int Id, i; CheckSpecificationPart(); if (ProblemType == HPP) Dimension--; if (!DisplayDataType || strcmp(DisplayDataType, "TWOD_DISPLAY")) eprintf ("DISPLAY_DATA_SECTION conflicts with DISPLAY_DATA_TYPE: %s", DisplayDataType); if (!FirstNode) CreateNodes(); N = FirstNode; do N->V = 0; while ((N = N->Suc) != FirstNode); N = FirstNode; for (i = 1; i <= Dimension; i++) { if (!fscanint(ProblemFile, &Id)) eprintf("Missing nodes in DIPLAY_DATA_SECTION"); if (Id <= 0 || Id > Dimension) eprintf("(DIPLAY_DATA_SECTION) Node number out of range: %d", Id); N = &NodeSet[Id]; if (N->V == 1) eprintf("(DIPLAY_DATA_SECTION) Node number occours twice: %d", N->Id); N->V = 1; if (!fscanf(ProblemFile, "%lf", &N->X)) eprintf("Missing X-coordinate in DIPLAY_DATA_SECTION"); if (!fscanf(ProblemFile, "%lf", &N->Y)) eprintf("Missing Y-coordinate in DIPLAY_DATA_SECTION"); } N = FirstNode; do if (!N->V) break; while ((N = N->Suc) != FirstNode); if (!N->V) eprintf("(DIPLAY_DATA_SECTION) No coordinates given for node %d", N->Id); if (ProblemType == HPP) Dimension++; }
static void Read_EDGE_WEIGHT_SECTION() { Node *Ni, *Nj; int i, j, n, W; CheckSpecificationPart(); if (!FirstNode) CreateNodes(); if (ProblemType != ATSP) { assert(CostMatrix = (int *) calloc((size_t) Dimension * (Dimension - 1) / 2, sizeof(int))); Ni = FirstNode->Suc; do { Ni->C = &CostMatrix[(size_t) (Ni->Id - 1) * (Ni->Id - 2) / 2] - 1; } while ((Ni = Ni->Suc) != FirstNode); } else { n = Dimension / 2; assert(CostMatrix = (int *) calloc((size_t) n * n, sizeof(int))); for (Ni = FirstNode; Ni->Id <= n; Ni = Ni->Suc) Ni->C = &CostMatrix[(size_t) (Ni->Id - 1) * n] - 1; } if (ProblemType == HPP) Dimension--; switch (WeightFormat) { case FULL_MATRIX: if (ProblemType == ATSP) { n = Dimension / 2; for (i = 1; i <= n; i++) { Ni = &NodeSet[i]; for (j = 1; j <= n; j++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; Ni->C[j] = W; if (i != j && W > M) M = W; } Nj = &NodeSet[i + n]; if (!Ni->FixedTo1) Ni->FixedTo1 = Nj; else if (!Ni->FixedTo2) Ni->FixedTo2 = Nj; if (!Nj->FixedTo1) Nj->FixedTo1 = Ni; else if (!Nj->FixedTo2) Nj->FixedTo2 = Ni; } Distance = Distance_ATSP; WeightType = -1; } else for (i = 1, Ni = FirstNode; i <= Dimension; i++, Ni = Ni->Suc) { for (j = 1; j <= Dimension; j++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; if (j < i) Ni->C[j] = W; } } break; case UPPER_ROW: for (i = 1, Ni = FirstNode; i < Dimension; i++, Ni = Ni->Suc) { for (j = i + 1, Nj = Ni->Suc; j <= Dimension; j++, Nj = Nj->Suc) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; Nj->C[i] = W; } } break; case LOWER_ROW: for (i = 2, Ni = FirstNode->Suc; i <= Dimension; i++, Ni = Ni->Suc) { for (j = 1; j < i; j++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; Ni->C[j] = W; } } break; case UPPER_DIAG_ROW: for (i = 1, Ni = FirstNode; i <= Dimension; i++, Ni = Ni->Suc) { for (j = i, Nj = Ni; j <= Dimension; j++, Nj = Nj->Suc) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; if (i != j) Nj->C[i] = W; } } break; case LOWER_DIAG_ROW: for (i = 1, Ni = FirstNode; i <= Dimension; i++, Ni = Ni->Suc) { for (j = 1; j <= i; j++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; if (j != i) Ni->C[j] = W; } } break; case UPPER_COL: for (j = 2, Nj = FirstNode->Suc; j <= Dimension; j++, Nj = Nj->Suc) { for (i = 1; i < j; i++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; Nj->C[i] = W; } } break; case LOWER_COL: for (j = 1, Nj = FirstNode; j < Dimension; j++, Nj = Nj->Suc) { for (i = j + 1, Ni = Nj->Suc; i <= Dimension; i++, Ni = Ni->Suc) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); Ni->C[j] = W; } } break; case UPPER_DIAG_COL: for (j = 1, Nj = FirstNode; j <= Dimension; j++, Nj = Nj->Suc) { for (i = 1; i <= j; i++) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; if (i != j) Nj->C[i] = W; } } break; case LOWER_DIAG_COL: for (j = 1, Nj = FirstNode; j <= Dimension; j++, Nj = Nj->Suc) { for (i = j, Ni = Nj; i <= Dimension; i++, Ni = Ni->Suc) { if (!fscanint(ProblemFile, &W)) eprintf("Missing weight in EDGE_WEIGHT_SECTION"); if (W > INT_MAX / 2 / Precision) W = INT_MAX / 2 / Precision; if (i != j) Ni->C[j] = W; } } break; } if (ProblemType == HPP) Dimension++; }
static void Read_TOUR_SECTION(FILE ** File) { Node *First = 0, *Last = 0, *N, *Na; int i, k; if (TraceLevel >= 1) { printff("Reading "); if (File == &InitialTourFile) printff("INITIAL_TOUR_FILE: \"%s\" ... ", InitialTourFileName); else if (File == &InputTourFile) printff("INPUT_TOUR_FILE: \"%s\" ... ", InputTourFileName); else if (File == &SubproblemTourFile) printff("SUBPROBLEM_TOUR_FILE: \"%s\" ... ", SubproblemTourFileName); else for (i = 0; i < MergeTourFiles; i++) if (File == &MergeTourFile[i]) printff("MERGE_TOUR_FILE: \"%s\" ... ", MergeTourFileName[i]); } if (!FirstNode) CreateNodes(); N = FirstNode; do N->V = 0; while ((N = N->Suc) != FirstNode); if (ProblemType == HPP) Dimension--; if (ProblemType == ATSP) Dimension /= 2; if (!fscanint(*File, &i)) i = -1; for (k = 0; k <= Dimension && i != -1; k++) { if (i <= 0 || i > Dimension) eprintf("(TOUR_SECTION) Node number out of range: %d", i); N = &NodeSet[i]; if (N->V == 1 && k != Dimension) eprintf("(TOUR_SECTION) Node number occurs twice: %d", N->Id); N->V = 1; if (k == 0) First = Last = N; else { if (ProblemType == ATSP) { Na = N + Dimension; Na->V = 1; } else Na = 0; if (File == &InitialTourFile) { if (!Na) Last->InitialSuc = N; else { Last->InitialSuc = Na; Na->InitialSuc = N; } } else if (File == &InputTourFile) { if (!Na) Last->InputSuc = N; else { Last->InputSuc = Na; Na->InputSuc = N; } } else if (File == &SubproblemTourFile) { if (!Na) (Last->SubproblemSuc = N)->SubproblemPred = Last; else { (Last->SubproblemSuc = Na)->SubproblemPred = Last; (Na->SubproblemSuc = N)->SubproblemPred = Na; } } else { for (i = 0; i < MergeTourFiles; i++) { if (File == &MergeTourFile[i]) { if (!Na) Last->MergeSuc[i] = N; else { Last->MergeSuc[i] = Na; Na->MergeSuc[i] = N; } } } } Last = N; } if (k < Dimension) fscanint(*File, &i); if (k == Dimension - 1) i = First->Id; } N = FirstNode; do if (!N->V) eprintf("(TOUR_SECTION) Node is missing: %d", N->Id); while ((N = N->Suc) != FirstNode); if (File == &SubproblemTourFile) { do { if (N->FixedTo1 && N->SubproblemPred != N->FixedTo1 && N->SubproblemSuc != N->FixedTo1) eprintf("Fixed edge (%d, %d) " "does not belong to subproblem tour", N->Id, N->FixedTo1->Id); if (N->FixedTo2 && N->SubproblemPred != N->FixedTo2 && N->SubproblemSuc != N->FixedTo2) eprintf("Fixed edge (%d, %d) " "does not belong to subproblem tour", N->Id, N->FixedTo2->Id); } while ((N = N->Suc) != FirstNode); } if (ProblemType == HPP) Dimension++; if (ProblemType == ATSP) Dimension *= 2; if (TraceLevel >= 1) printff("done\n"); }
static void Read_EDGE_DATA_SECTION() { Node *Ni, *Nj; int i, j; CheckSpecificationPart(); if (!EdgeDataFormat) eprintf("Missing EDGE_DATA_FORMAT specification"); if (!FirstNode) CreateNodes(); if (ProblemType == HPP) Dimension--; if (!strcmp(EdgeDataFormat, "EDGE_LIST")) { if (!fscanint(ProblemFile, &i)) i = -1; while (i != -1) { if (i <= 0 || i > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", i); fscanint(ProblemFile, &j); if (j <= 0 || j > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", j); if (i == j) eprintf("(EDGE_DATA_SECTION) Illgal edge: %d to %d", i, j); if (ProblemType == ATSP) { i += Dimension / 2; j += Dimension / 2; } Ni = &NodeSet[i]; Nj = &NodeSet[j]; if (!Ni->CandidateSet) { Ni->V = 1; assert(Ni->CandidateSet = (Candidate *) calloc(2, sizeof(Candidate))); Ni->CandidateSet[0].To = Nj; Ni->CandidateSet[0].Cost = 0; } else { Ni->CandidateSet[Ni->V].To = Nj; Ni->CandidateSet[Ni->V].Cost = 0; assert(Ni->CandidateSet = (Candidate *) realloc(Ni->CandidateSet, (++Ni->V + 1) * sizeof(Candidate))); Ni->CandidateSet[Ni->V].To = 0; } if (!Nj->CandidateSet) { Nj->V = 1; assert(Nj->CandidateSet = (Candidate *) calloc(3, sizeof(Candidate))); Nj->CandidateSet[0].To = Ni; Nj->CandidateSet[0].Cost = 0; } else { Nj->CandidateSet[Nj->V].To = Ni; Nj->CandidateSet[Nj->V].Cost = 0; assert(Nj->CandidateSet = (Candidate *) realloc(Nj->CandidateSet, (++Nj->V + 1) * sizeof(Candidate))); Nj->CandidateSet[Nj->V].To = 0; } fscanint(ProblemFile, &i); } } else if (!strcmp(EdgeDataFormat, "ADJ_LIST")) { Ni = FirstNode; do Ni->V = 0; while ((Ni = Ni->Suc) != FirstNode); if (!fscanint(ProblemFile, &i)) i = -1; while (i != -1) { if (i <= 0 || i > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf("(EDGE_DATA_SECTION) Node number out of range: %d", i); if (ProblemType == ATSP) i += Dimension / 2; Ni = &NodeSet[i]; fscanint(ProblemFile, &j); while (j != -1) { if (j <= 0 || j > (ProblemType != ATSP ? Dimension : Dimension / 2)) eprintf ("(EDGE_DATA_SECTION) Node number out of range: %d", j); if (i == j) eprintf("(EDGE_DATA_SECTION) Illgal edge: %d to %d", i, j); if (ProblemType == ATSP) j += Dimension / 2; Nj = &NodeSet[j]; if (!Ni->CandidateSet) { Ni->V = 1; assert(Ni->CandidateSet = (Candidate *) calloc(3, sizeof(Candidate))); Ni->CandidateSet[0].To = Nj; Ni->CandidateSet[0].Cost = 0; } else { Ni->CandidateSet[Ni->V].To = Nj; Ni->CandidateSet[Ni->V].Cost = 0; assert(Ni->CandidateSet = (Candidate *) realloc(Ni->CandidateSet, (++Ni->V + 1) * sizeof(Candidate))); Ni->CandidateSet[Ni->V].To = 0; } if (!Nj->CandidateSet) { Nj->V = 1; assert(Nj->CandidateSet = (Candidate *) calloc(3, sizeof(Candidate))); Nj->CandidateSet[0].To = Ni; Nj->CandidateSet[0].Cost = 0; } else { Nj->CandidateSet[Nj->V].To = Ni; Nj->CandidateSet[Nj->V].Cost = 0; assert(Nj->CandidateSet = (Candidate *) realloc(Nj->CandidateSet, (++Nj->V + 1) * sizeof(Candidate))); Nj->CandidateSet[Nj->V].To = 0; } fscanint(ProblemFile, &j); } fscanint(ProblemFile, &i); } } else eprintf("(EDGE_DATA_SECTION) No EDGE_DATA_FORMAT specified"); if (ProblemType == HPP) Dimension++; Distance = Distance_1; }