void CheckValidity(int *tour, char *text) { int visited[NUM_CITIES + 1]; int i; for(i = 0; i <= NUM_CITIES; i++) visited[i] = 0; for(i = 0; i < NUM_CITIES; i++) { if(visited[tour[i]] == 1) { printf("ERROR:Invalid path generated:<%s>,city %d repeated\n" ,text, tour[i] ); printTour(tour); exit(0); } visited[tour[i]] = 1; } for(i = 1; i <= NUM_CITIES; i++) { if(visited[i] == 0) { printf("ERROR:Invalid path generated:<%s>, city %d not present\n", text, i); printTour(tour); exit(0); } } }
int main(){ initGraphCity(); initTour(&bestTour); bestTour.length = INF; dfs(); printTour(&bestTour); return 0; }
// Compute an eulerian tour void Graph::computeTour() { if(tourExists()) { output << std::endl << "Tour exists! Hooray!" << std::endl << std::endl; findCycles(); mergeCycles(); printTour(); } else { output << "No Eulerian tour available." << std::endl; return; } }
void checkTour( long int *t ) /* FUNCTION: make a simple check whether tour *t can be feasible INPUT: pointer to a tour OUTPUT: none */ { long int i, sum=0; for( i = 0 ; i < n ; i++ ) { sum += t[i]; } if ( sum != (n-1) * n / 2 ) { fprintf(stderr,"Next tour must be flawed !!\n"); printTour( t ); exit(1); } }
int main() { FILE *fp; /* Standard 파일 구조체 */ int t, m, n, i; point start; /* 나이트 첫 위치 */ fp = fopen("input.txt", "r"); /* 파일 읽기 모드 */ if (fp == NULL) return -1; /* 예외 처리 */ fscanf(fp, "%d", &t); /* 데이터의 갯수 읽음 */ while (t--) { fscanf(fp, "%d %d %d %d", &m, &n, &start.y, &start.x); /* 데이터 읽음 */ memset(board, 0, sizeof(int)*(MAXSIZE*MAXSIZE)); /* 체스판 초기화 */ memset(path, 0, sizeof(int)*(MAXSIZE*MAXSIZE)); /* 투어 경로 초기화 */ board[start.y][start.x] = MARK; /* 시작 위치 표시 */ path[start.y][start.x] = 1; /* 투어 경로 표시 */ knightTour(m, n, start, 1); /* 나이트 투어 */ if(checkPath(m,n)) printTour(m, n); /* 투어 경로 존재시 출력 */ else printf("0\n"); /* 투어 경로 존재하지 않으면 '0' 출력 */ } fclose(fp); /* 파일 닫음 */ return 0; /* 프로그램 종료 */ }