📄 ls.c
字号:
j = n-1; h_tour[i] = tour[j]; n1++; } j = pos[h5]; h = pos[h4]; i = 0; hh_tour[i] = tour[j]; n2 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; hh_tour[i] = tour[j]; n2++; } j = pos[h2]; for ( i = 0; i<n1 ; i++ ) { tour[j] = h_tour[i]; pos[h_tour[i]] = j; j++; if ( j >= n ) j = 0; } for ( i = 0; i < n2 ; i++ ) { tour[j] = hh_tour[i]; pos[hh_tour[i]] = j; j++; if ( j >= n ) j = 0; } tour[n] = tour[0]; /* getchar(); */ } else if ( h == 1 ) { /* copy part from pos[h2] to pos[h3] and from pos[h1] to pos[h6] (inverted), it remains the part from pos[h4] to pos[h5] */ j = pos[h2]; h = pos[h3]; i = 0; h_tour[i] = tour[j]; n1 = 1; while ( j != h ) { i++; j++; if ( j >= n ) j = 0; h_tour[i] = tour[j]; n1++; } j = pos[h1]; h = pos[h6]; i = 0; hh_tour[i] = tour[j]; n2 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; hh_tour[i] = tour[j]; n2++; } j = pos[h6]; for ( i = 0; i<n1 ; i++ ) { tour[j] = h_tour[i]; pos[h_tour[i]] = j; j++; if ( j >= n ) j = 0; } for ( i = 0; i < n2 ; i++ ) { tour[j] = hh_tour[i]; pos[hh_tour[i]] = j; j++; if ( j >= n ) j = 0; } tour[n] = tour[0]; } else if ( h == 2 ) { /* copy part from pos[h1] to pos[h6] (inverted) and from pos[h4] to pos[h5], it remains the part from pos[h2] to pos[h3] */ j = pos[h1]; h = pos[h6]; i = 0; h_tour[i] = tour[j]; n1 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; h_tour[i] = tour[j]; n1++; } j = pos[h4]; h = pos[h5]; i = 0; hh_tour[i] = tour[j]; n2 = 1; while ( j != h ) { i++; j++; if ( j >= n ) j = 0; hh_tour[i] = tour[j]; n2++; } j = pos[h4]; /* Now copy stored part from h_tour */ for ( i = 0; i<n1 ; i++ ) { tour[j] = h_tour[i]; pos[h_tour[i]] = j; j++; if ( j >= n ) j = 0; } /* Now copy stored part from h_tour */ for ( i = 0; i < n2 ; i++ ) { tour[j] = hh_tour[i]; pos[hh_tour[i]] = j; j++; if ( j >= n ) j = 0; } tour[n] = tour[0]; } } else if ( move_flag == 3 ) { if ( pos_c3 < pos_c1 ) n1 = pos_c1 - pos_c3; else n1 = n - (pos_c3 - pos_c1); if ( pos_c3 > pos_c2 ) n2 = pos_c3 - pos_c2; else n2 = n - (pos_c2 - pos_c3); if ( pos_c2 > pos_c1 ) n3 = pos_c2 - pos_c1; else n3 = n - (pos_c1 - pos_c2); /* n1: length h6 - h1, n2: length h4 - h5, n2: length h2 - h3 */ val[0] = n1; val[1] = n2; val[2] = n3; /* Determine which is the longest part */ h = 0; help = LONG_MIN; for ( g = 0; g <= 2; g++) { if ( help < val[g] ) { help = val[g]; h = g; } } /* order partial tours according length */ if ( h == 0 ) { /* copy part from pos[h2] to pos[h3] (inverted) and from pos[h4] to pos[h5] it remains the part from pos[h6] to pos[h1] */ j = pos[h3]; h = pos[h2]; i = 0; h_tour[i] = tour[j]; n1 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; h_tour[i] = tour[j]; n1++; } j = pos[h2]; h = pos[h5]; i = pos[h4]; tour[j] = h4; pos[h4] = j; while ( i != h ) { i++; if ( i >= n ) i = 0; j++; if ( j >= n ) j = 0; tour[j] = tour[i]; pos[tour[i]] = j; } j++; if ( j >= n ) j = 0; for ( i = 0; i < n1 ; i++ ) { tour[j] = h_tour[i]; pos[h_tour[i]] = j; j++; if ( j >= n ) j = 0; } tour[n] = tour[0]; } else if ( h == 1 ) { /* copy part from pos[h3] to pos[h2] (inverted) and from pos[h6] to pos[h1], it remains the part from pos[h4] to pos[h5] */ j = pos[h3]; h = pos[h2]; i = 0; h_tour[i] = tour[j]; n1 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; h_tour[i] = tour[j]; n1++; } j = pos[h6]; h = pos[h1]; i = 0; hh_tour[i] = tour[j]; n2 = 1; while ( j != h ) { i++; j++; if ( j >= n ) j = 0; hh_tour[i] = tour[j]; n2++; } j = pos[h6]; for ( i = 0; i<n1 ; i++ ) { tour[j] = h_tour[i]; pos[h_tour[i]] = j; j++; if ( j >= n ) j = 0; } for ( i = 0 ; i < n2 ; i++ ) { tour[j] = hh_tour[i]; pos[hh_tour[i]] = j; j++; if ( j >= n ) j = 0; } tour[n] = tour[0]; } else if ( h == 2 ) { /* copy part from pos[h4] to pos[h5] (inverted) and from pos[h6] to pos[h1] (inverted) it remains the part from pos[h2] to pos[h3] */ j = pos[h5]; h = pos[h4]; i = 0; h_tour[i] = tour[j]; n1 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; h_tour[i] = tour[j]; n1++; } j = pos[h1]; h = pos[h6]; i = 0; hh_tour[i] = tour[j]; n2 = 1; while ( j != h ) { i++; j--; if ( j < 0 ) j = n-1; hh_tour[i] = tour[j]; n2++; } j = pos[h4]; /* Now copy stored part from h_tour */ for ( i = 0; i< n1 ; i++ ) { tour[j] = h_to
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -