TEMA

TLE - ajuda :)

welton4 preguntado 4 years ago

Alguém tem ideias de otimização?

`// na main:     string letra = "....................";``

int busca(vector< vector<char> > parque, vector< vector<bool> > path, string letra, int n, int i, int j, int peso){
    if(i<0||j<0||i>=n||j>=n) return INT_MAX;// passei dos limites
    if(path[i][j]) return INT_MAX;// esse no já está no caminho
    /*verificar se esse caminho é possivel*/

    for (int k = 0; k < L; ++k)
    {
        if(letra[k]=='.'){//ainda não existe letra registrada, se chegou aqui pode adicionar e break
            //adicionar letra oposta como nao permitida
            letra[k] = npermitida(parque[i][j]); //inclui um char nao permitido
            break;
        }else{
            if(parque[i][j]==letra[k]){
                //não pode passar
                return INT_MAX;
            }
        }
    }

    /*se esse caminho é possivel incluir ele e procurar proximo passo*/
    if((i==(n-1))&&(i==j)){

        return (peso+1);// cheguei no final
    }

    path[i][j]=true;
    int esq,dir,cima,baixo, peso_atual=peso+1;

    esq = busca(parque,path,letra,n,i,j-1,peso_atual);
    dir = busca(parque,path,letra,n,i,j+1,peso_atual);
    cima = busca(parque,path,letra,n,i-1,j,peso_atual);
    baixo = busca(parque,path,letra,n,i+1,j,peso_atual);

    if(esq==dir&&dir==cima&&cima==baixo&&(baixo==INT_MAX)){// todos resultaram em algo impossivel
        return INT_MAX;
    }
    if(esq<dir&&esq<cima&&esq<baixo){
        return esq;
    }else if(dir<esq&&dir<cima&&dir<baixo){
        return dir;
    }else if(cima<esq&&dir>cima&&cima<baixo){
        return cima;
    }else{
        return baixo;
    }
}

Este tema aún no ha sido contestado. ¡Sé el primero!

Recuerda no enviar soluciones. Tu mensaje puede ser revisado por nuestros moderadores.