Foco Cursos Preparatorios Recife

SUNY College at Oneonta - Bom pessoal, hoje vamos ver o ultimo algoritmo de busca que vamos estudar, que é a busca pelo menor caminho Partindo de um vértice inicial, vou calcular a menor distancia desse vértice para todos os demais que existem no grafo Desde que exista caminho entre eles, o que a gente vai ver é o algoritmo de Dijkstra e resolve esse problema para grafos dirigidos ou não Desde que o peso das arestas não seja negativo, existem outros algoritmos para resolver esse problema mas vamos ver só esse hoje A função menorCaminho recebe um grafo, vértice inicial e dois vetores auxiliares, ant e dist, eles tem o mesmo tamanho Que o número de vértices do grafo, o dist é a distância do vértice inicial até aquele vértice, ant me diz o anterior daquele vértice No dist eu tenho a distância, dentro do ant eu tenho a ordem que eu tenho que visitar os vértices para eu chegar no meu destino Então são duas informações, eu poderia fazer só com o dist se eu não quero retornar para o usuário quem vem antes de quem Questão de opção de implementação, então aqui no meu grafo, estou trabalhando com um dígrafo Montei um grafo só pra testar, meus vetores, ant e dist de tamanho 5, que é o mesmo número de vértices do meu grafo Estou chamando a função menor caminho partindo do vértice inicial 0 e os dois vetores de resposta Trabalha com duas funções a busca, então tenho a função auxiliar que chama procuraMenorDistancia Ela vai ser usada para a busca do menor caminho, ela recebe um vetor da distância, um vetor de visitados e o número de vértices que tenho Essa função procura o vértice com a menor distancia, até o momento em que não tenha sido visitado ainda Vou percorrer todos os vértices e verificar se essa distância é maior ou igual a 0, pois estou considerando se o vértice i ainda não foi visitado Então a distância é -1, pois não existe distancia negativa, é o valor que eu vou usar como marcação Para saber a distância dele ou não, estou verificando se ele não foi visitado ainda, inicialmente todos os vértices não foram visitados E tem distância -1, exceto o vértice inicial que tem distância 0, então distancia>=0 e visitado ==0 Verifico se for o primeiro vértice que achei nessa busca, então menor = i e marco como o primeiro Se não é a primeira vez que eu encontro um vértice assim, então eu faço a comparação se a distância do menor é igual a distância do atual Faço a troca, no final vou retornar o menor, que na verdade é o índice do vértice que satisfaz essa condição aqui Possui a menor distância e não foi visitado ainda, é essa a informação que importa Dentro do grafo o vértice que tem a menor distância até o momento e que não foi visitado ainda. Isso que eu preciso, e é isso que vou usar na função menorCaminhoGrafo Inicializei um contar que recebe o número de vértices, esse contador é só para garantir que eu visitei todos os vértices Criei um vetor auxiliar visitado usando malloc com o mesmo número de vértices e inicializei meus dados O anterior vale -1, como não fiz a visita ainda, ninguém tem anterior ainda, a distância entre todo mundo é -1 E ninguém foi visitado ainda, só inicializei, terminei a inicialização o vértice inicial recebe distancia 0 Ou seja, distancia dele pra ele mesmo é zero, não tem que percorrer nada pra chegar nele mesmo Enquanto eu tiver vértices para serem visitados no meu grafo(cont>0), procura a menor distancia Procurar o vértice que não foi visitado ainda e tem a menor distancia, nessa primeira vez vai ser o ini Simplesmente marquei o ini com 0 porque ele vai ser o primeiro vértice que não foi visitado que tem uma distância valida Aqui é só um teste caso não exista caminho de todo mundo pra todo mundo, existem vértices que eu não consigo alcançar partindo de ini Pode ter um grafo assim desconexo, não tem uma conexão ligando as duas partes, então recuperei meu vértice u Que ainda não foi visitado e é a menor distancia, vou marcar ele como visitado, decremento meu cont porque visitei mais um vértice Esse cont é só pra não precisar ficar contando quantas vezes tem 1 dentro do meu vetor visitado Depois que eu terminei o meu while eu vou liberar meu vetor visitado, vamos continuar com a busca do menor caminho aqui Pra aquele vértice u eu vou visitar todos os vizinhos dele, para cada vértice vizinho dele, só pra simplificar O vértice vizinho de u é o arestas i aqui, coloco no meu ind, se a distância de ind for menor que zero, significa que ninguém chegou nele ainda Ele está com uma distância invalida, distância de ind passa então a ser distância de u+1 Nesse caso estou considerando a distância sendo o número de vértices que eu tenho que passar pra chegar em alguém Poderia fazer de outra forma, distância de ind é a distância de u + o peso de u para i, seria uma outra maneira Posso calcular o menor caminho considerando apenas quantas arestas eu tenho que percorrer ou qual a soma dos pesos das arestas São duas maneiras de calcular o menor caminho, só descomentar esses dois e comentar os outros, e eu coloco que o vértice Anterior desse ind é o vértice u, ou seja, pra chegar nesse vértice ind eu tenho que vir por u, é u que chega nele com essa distancia Isso só vale se o vértice tem uma distância menor que 0, ou seja, ele foi inicializado com -1, ninguém chegou nele Se ele já tiver um valor de distância valida, vou verificar se essa distância é maior do que a distância de u+1 Que é o valor que eu usei pra atualizar aqui, ou se ela é maior que o peso, depende de como estou fazendo Se for maior, significa que existe um caminho passando por u que chega em ind com um custo menor Então eu vou por esse caminho, vou para ind com distância de u+1, e anterior de ind passa a ser u Modifico quem é meu antecessor, e qual a distância do meu vértice índice se existir um caminho menor até lá Essa é a ideia, fazer para cada vizinho do vértice e aí continuo fazendo isso, apesar de eu ter visitado todos os vizinhos dele Eles não foram marcados como visitados, eu não mudei a variável visitado dele, ou seja, ainda tenho que ir lá e percorrer esse vértice Ind para ver se não tem como melhorar ele ainda, mas essa é a ideia, vamos ver aqui, partindo do vértice 0 Aqui está inicializado, distancia 0 para o vértice 0, tudo é inicializado com -1, distância e o antecessor E ninguém foi visitado ainda, vou recuperar o primeiro vértice, distancia >=0, que não tenha sido visitado Recuperei o vértice com a menor distancia ainda não visitado, marco ele como visitado, vértice 0 foi visitado Atualizo agora a distância desse vértice para todos os vizinhos dele, no caso ele só tem um vizinho Então é isso que eu vou fazer, atualizar essa distância para o 1, estou fazendo só a soma das arestas Quantas arestas preciso percorrer, a distância para o vértice 1 passa a ser 1, a distância do vértice 0 +1 E quem é o antecessor desse vértice? É 0, para chegar no vértice 1 eu vou pelo 0 Faço a mesma coisa, recupero quem tem a menor distância e ainda não foi visitado, era o 1, ele tem uma distância valida Mas ele não tinha sido visitado ainda, quem vou visitar deles agora? O 3 e o 2 que são os vizinhos dele Volta a atualizar a distância deles, distância do vértice 1+1 E aqui quem é o antecessor do vértice 2 e 3, é o vértice 1, partindo do vértice 1 que eu cheguei no vértice 2 e 3 Vou marcar depois eles como visitados, quando eu tirar eles da fila, procuro agora quem tem a menor distância e não foi visitado Pode ser o vértice 2 ou o vértice 3, no caso vou pegar o vértice 2, o vizinho dele é o 4, atualiza a distância do 4, distância do 2+1 =3 o antecessor dele passa a ser o próprio 2 e continuo o processo, não tem mais nenhum adjacente pegar o vértice de menor distância, quem foi agora? O vértice 3, marco ele como visitado, tenho 0 e 4 vejo se consigo melhorar a distância, distância do vértice 0 é 0, não tem como melhorar, tenho aqui distancia 2 Distancia para vértice 4 é 3, eu não consigo melhorar essa distância, vou repetir esse processo, tiro o vértice 4 agora Ele não foi visitado ainda, verifica e atualiza se necessário, a distância e anterior, vértice 4 se conecta ao primeiro A distância do vértice 1 é 1, ou seja, 3+1 não satisfaz, a distância dele já está boa, todos os vértices foram visitados O processo de busca termina, não tem mais o que fazer, aqui eu tenho a distância de cada vértice a partir do vértice 0 E os antecessores, ou seja, o vértice 0 como é o vértice inicial não tem antecessor, mas para ir No vértice 4 eu tenho que ir pro vértice 2 e do dois eu vou para o 1, e do 1 vou para o 0, o caminho então é 0,1,2 Cheguei no vértice 4 Aqui dentro do antecessor eu tenho o caminho para chegar em algum vértice e a distância até lá, 3 arestas Poderia ter somado o peso dessas arestas se fosse um grafo ponderado, mas só para simplificar a gente fez desse jeito Busca pelo menor caminho era isso pessoal, espero que tenham gostado, até as próximas aulas.

Foco cursos preparatorios recife the walking dead android youtube Itaituba lembrancinhas de aniversario infantil ursinho marinheiro. Itabuna projeto meio ambiente quinto ano Proposta de Dissertação, paroquia nossa senhora aparecida lencois pta Declaração Pessoal, curso de engenharia aeronautica Bibliografia anotada, como escrever artigo de revista ABNT. Artigo cientifico engenharia genetica exames de hiv gratuito sp foco cursos preparatorios recife Curitiba curso nr10 online gratis certificado. Otras normas del derecho presupuestario monografia Tese Limeira artigo 98 ctn, questoes sobre o artigo 1 da constituicao federal.

Catalão:

Juliette Stafford, Cortland County: CUNY Graduate Center. Blumenau: New York University School of Law; 2005.

Сlara Park, Warren County. Teresópolis: Wagner College; 2011.

Tom Rich, W 78th Street zip 10024. Cabo de Santo Agostinho: Vaughn College of Aeronautics and Technology, East Elmhurst, Queens; 2007.

inserted by FC2 system