Bem-vindo de volta.
Vamos ficar presos e continuar a codificação com nosso método gráfico de construção, que é um pouco
mais complexo do que isso, pois temos que construir aquela estrutura multi ramificada de todos os nós.
Não é apenas uma grande e longa linha e para isso vamos usar.
Portanto, espero que todos vocês estejam atualizados sobre o uso da recursividade porque é uma coisa complicada para se endireitar na
mente, mas é um conceito de programação muito, muito poderoso.
E basicamente é quando um método se autodenomina.
E assim você termina com todas essas versões do método rodando umas sobre as outras em memória.
E em algum momento você tem que cavar seu caminho de volta para fora deles.
Mas vou lhe mostrar como fazer isso, portanto, não entre em pânico.
Por isso, vamos criar um gráfico privado de construção de bool e ele vai levar nosso nó pai.
Então, a lista dos pais do nó.
E sai.
Uma lista de ações g que são ações utilizáveis.
E nosso dicionário com nosso objetivo em um dicionário que é uma lembrança que é uma int de corda e que terá
objetivo.
Certo.
Então este é Bill Groff.
Portanto, a primeira coisa que vamos fazer é encontrar o caminho.
É falso porque, neste ponto, não encontramos um caminho e precisamos saber se o encontramos
ou não.
Depois faremos um quatro em cada uma de nossas ações.
Portanto, para cada ação g, ação em ações utilizáveis que estamos passando.
E eu acho que escrevi errado, mas vou manter a grafia errada lá dentro.
E agora, se a ação for realizável, dado o estado de origem.
Então esta ação é definitivamente uma ação que estamos procurando.
Portanto, neste momento, vamos ao dicionário.
Int de corda do estado atual é igual a um novo dicionário de int de corda, mas está sendo copiado do estado de origem.
Portanto, a primeira vez que entramos aqui, a lista de estados, lembre-se que eles vêm do primeiro nó e que esse
primeiro nó é o nó inicial e tem uma lista de todos os estados do mundo nele contidos.
Portanto, a primeira vez que entrarmos neste estado atual será preenchido com os estados
do mundo.
Agora, a idéia com o estado atual é, à medida que passamos por todas as nossas ações e construímos nosso ramo, é que acompanhemos
tudo o que está sendo satisfeito e todas as condições que estão mudando à medida que estamos
passando.
Portanto, é como fazer uma espécie de pré-teste no ramo e, como este estado atual tem todos os estados que serão
alcançados antes de se chegar a essa ação, isso ajuda a corresponder a eles à medida que vamos
avançando.
Certo.
Portanto, temos este estado de pais realizáveis, temos nossa corrente e agora vamos criar um para
cada um.
Par de valores chave, que será.
Combine corda e int.
Portanto, os principais valores dos efeitos em efeito de ação.
E então, se não for o estado atual, contém a chave dos efeitos da chave ponto.
Situação atual.
Não acrescente.
Uma chave fixa e um valor de ponto fixo.
Portanto, agora o estado atual não terá apenas o estado do mundo, mas também acrescentaremos
a ele os efeitos da ação atual.
E então, à medida que avançamos, os efeitos da próxima ação serão acrescentados e os da próxima.
Portanto, é manter essa lista realmente longa.
Muito bem.
Por isso, vamos terminar nosso para cada etapa lá.
Então, vamos fazer nó e nó igual a novo nó.
Assim, agora criamos o próximo nó e seu custo pai e pai mais o custo da ação.
Portanto, o valor do custo aqui, você pode ver que estamos recebendo cada custo das ações individuais.
Mas conforme nos movemos através de todos os nós, ele se acumula e é assim que podemos fazer isso.
Obtenha o nó mais barato no topo do código aqui e saiba que encontramos o plano apenas olhando
para o último nó no final.
Isso é o mais barato.
Certo.
E também vamos definir aqui o estado atual.
Portanto, estamos dando ao nosso novo nó ou passando ao longo deste acúmulo de estados e depois também a ação.
E então se.
Objetivo alcançado, que ainda não escrevemos, onde vamos igualar o objetivo que buscamos
com o estado atual.
Portanto, em algum lugar no estado atual, se atingimos nosso objetivo, então estamos de fato acabados.
Assim, as folhas acrescentam nosso nó.
E então o caminho encontrado é igual a verdade.
Agora, senão, ainda não encontramos um caminho.
Portanto, o que fazemos é ir para o próximo nó.
Por isso, já criamos nosso próximo nó aqui.
Mas agora o que vamos fazer é criar um subconjunto das ações utilizáveis para tirar a ação atual que já temos
em nosso nó.
Portanto, antes de tudo, liste o subconjunto de ação G.
Um subconjunto de ações coletivas, outro método que ainda não podemos escrever ações utilizáveis.
Ação.
E isto vai tirar de nossas ações utilizáveis a ação para a qual já criamos um nó em nosso gráfico, de modo que, à medida que
vamos percorrendo os ramos, esta lista de ações utilizáveis se torna cada vez menor, o que
significa que você não pode criar um caminho circular em nenhum lugar.
Portanto, você não vai acabar com algum tipo de círculo sem fim que você está procurando
para criar um plano.
Certo, então a bola encontrada e isso vai igualar o gráfico de construção.
E aqui você pode ver nossa chamada recursiva, para onde agora enviamos através do próximo nó.
Nós ainda damos nossas folhas, mas em vez de ações utilizáveis, todas elas estamos apenas enviando através de
nosso subconjunto e novamente, estamos enviando através do objetivo.
Assim como o gráfico da conta continua sendo chamado repetidas vezes, estamos enviando o próximo nó e depois
o próximo nó, o próximo nó que foi anexado.
E este conjunto de ação utilizável que está ficando cada vez menor, cada vez menor em subconjunto.
E em algum momento, se for encontrado.
Acontece que a partir deste caminho então encontrado é igual a verdade.
E isso então termina de outra forma.
E podemos terminar nosso se nossos quatro h no topo.
E antes de terminarmos nosso método, podemos voltar a encontrar.
O caminho de volta.
Para nosso planejador.
Esta é a nossa função recursiva.
Isso é fazer todo o trabalho de construção de nosso gráfico.
Certo.
A última coisa que precisamos fazer neste arquivo de código e eu prometo, bem, não é a última coisa.
É a última coisa que você pode fazer por enquanto, antes de começarmos a criar
algo, é declarar estes dois métodos para você querer que o objetivo seja alcançado e o sub-conjunto de ação, certo?
Por isso, vamos colocar isso aqui embaixo.
Portanto, certifique-se de que você ainda está dentro de sua classe, mas fora do método anterior.
Portanto, esta será nossa meta privada de bool alcançada e vai usar o dicionário de novo.
Surpreender, surpreender int.
Vá e depois dicionário.
Estado INT.
E aqui para cada par de valores chave que será novamente nosso fio e int.
Um G em meta.
Assim, percorrer todos os nossos objetivos e certificar-se de que eles existam nos efeitos.
Então, se.
O Estado não contém a chave.
G ponto chave.
Então retornaremos falsos.
Caso contrário, se fizermos todo o processo de looping e verificação, então estaremos retornando
verdadeiros que somos capazes de satisfazer todos os objetivos.
Portanto, essa é uma meta atingida diretamente até a verificação.
E então precisamos de nosso subconjunto de ação aqui em cima, que se livra da ação atual que acabamos de atribuir
a um nó fora das ações utilizáveis.
Portanto, isto novamente será um assunto privado.
E lista de.
G.
Lista de subgrupos de ação.
G Ação.
Ações e ações.
Retire-me.
Então, essa será a ação pela qual estamos passando.
Estamos procurando à medida que nos movimentamos, e depois vamos nos livrar dele neste caso específico
da lista.
Portanto, vai ser uma lista.
G ação.
Subset.
Igual a nova lista.
G ação.
E então para cada ação g a em ações pelas quais passamos.
Se encontrarmos aquele que vamos remover, então se ou se não encontrarmos deve dizer se não houver ação.
O ponto é igual a remover-me.
Portanto, aquele que temos que deixar de fora, então, estamos simplesmente ignorando.
Caso contrário, adicione um subconjunto e nós colocaremos a ação lá dentro.
Então, depois de termos feito o nosso laço, nós simplesmente devolveremos nosso subconjunto e isso basicamente é remover
essa ação das ações utilizáveis.
Ok, então você ficará aliviado em saber que terminamos com nosso planejador G, por enquanto.
Logo em seguida, podemos realmente começar a fazer algumas ações e começar a pressionar o botão play em unidade para ver as
coisas funcionando e como elas funcionam e então começar a construir a partir daí.