7-20 Ordenar con Intercambiable (0, i) (25 分)

título

Aquí Insertar imagen Descripción

análisis:

Secuencia se puede encontrar por varios anillos, los elementos en cada anillo pueden ser ordenados de tal manera que el elemento de anillo interior en la posición correcta, la muestra se puede encontrar ir de nuevo, en un intercambio de elemento de anillo requiere un número mínimo de elementos operación -1-fin se puede clasificar, porque la única 0 y el intercambio, si el anillo incluye 0, entonces el número de elementos necesitan ser intercambiado -1-orden, si no, hay que intercambiar 0 en el anillo, y luego de intercambio a cabo elementos necesitan ser intercambiado -1 + 2 + 1 número de veces que es el número de elementos. Entonces no intercambiar si un elemento ya en su lugar.

código:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n,s[100000],ans = 0;
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        scanf("%d",&s[i]);
    }
    for(int i = 0;i < n;i ++) {
        int k = s[i];
        int c = 0;
        while(s[k] != k) {
            c ++;
            int t = k;
            k = s[k];
            s[t] = t;
        }
        if(c == 0) continue;
        if(i == 0) ans += c - 1;
        else ans += c + 1;
    }
    printf("%d",ans);
}
Publicado 61 artículos originales · ganado elogios 7 · vistas 3617

Supongo que te gusta

Origin blog.csdn.net/weixin_42469716/article/details/105182407
Recomendado
Clasificación