Translate

Resolução de Problemas por Meio de Buscas

🗺️ Encontrando o Caminho Mais Rápido Entre Cidades com o Algoritmo de Dijkstra 

Analisemos o exemplo da Figura a seguir: os nós são cidades, são os estados deste espaço, sendo que Cidade 1 é o estado inicial e a Cidade 7 é o estado final. As outras cidades são estados parciais ou intermediários na solução do problema. Os arcos são caminhos que especificam a distância em quilômetros entre duas cidades. Neste grafo poderíamos acrescentar – nos arcos – os nomes das estradas e as direções ou sentidos.




  


Imagine que você está planejando uma viagem entre cidades conectadas por estradas, e deseja saber qual é o caminho mais rápido para chegar ao seu destino. Como resolver isso de forma eficiente, mesmo com várias possibilidades de rota? 🤔

A resposta está em um dos algoritmos mais clássicos e poderosos da ciência da computação: o algoritmo de Dijkstra.

Neste post, vamos mostrar como aplicamos esse algoritmo a um grafo representando cidades e estradas, onde cada conexão tem um custo (tempo de viagem). Vamos usar Python para isso, e no final, teremos não só o caminho mais curto, mas também os pontos intermediários por onde passamos.


🚦 O Problema

Dado um conjunto de cidades e estradas com tempos de deslocamento entre elas, queremos:

✅ Encontrar o caminho de menor custo entre duas cidades
✅ Saber o tempo total da viagem
✅ Identificar quais cidades intermediárias fazem parte do trajeto


🧮 Representando o Grafo

As cidades são os vértices e as estradas com seus tempos (em minutos) são as arestas ponderadas. Por exemplo:

grafo = {
    'Cidade 1': {'Cidade 2': 10, 'Cidade 6': 220, 'Cidade 7': 400},
    'Cidade 2': {'Cidade 1': 10, 'Cidade 4': 100, 'Cidade 6': 230},
    'Cidade 3': {'Cidade 4': 30, 'Cidade 5': 20},
    'Cidade 4': {'Cidade 2': 100, 'Cidade 3': 30, 'Cidade 7': 120},
    'Cidade 5': {'Cidade 3': 20, 'Cidade 6': 85, 'Cidade 7': 45},
    'Cidade 6': {'Cidade 1': 220, 'Cidade 2': 230, 'Cidade 5': 85},
    'Cidade 7': {'Cidade 4': 120, 'Cidade 5': 45, 'Cidade 1': 400}
}

🚀 O Algoritmo de Dijkstra

O algoritmo funciona assim:

  1. Define a cidade inicial com distância zero e todas as outras com infinito.

  2. Usa uma fila de prioridade para sempre explorar a cidade com menor custo atual.

  3. Atualiza as distâncias para os vizinhos se encontrar um caminho mais barato.

  4. No final, reconstrói o caminho mais curto com base nos predecessores de cada cidade.

Confira a implementação completa em Python:

import heapq

def dijkstra(grafo, inicio, fim):
    distancias = {v: float('infinity') for v in grafo}
    distancias[inicio] = 0
    predecessores = {v: None for v in grafo}
    fila = [(0, inicio)]

    while fila:
        atual_dist, atual = heapq.heappop(fila)
        if atual_dist > distancias[atual]:
            continue
        for vizinho, peso in grafo[atual].items():
            nova_dist = atual_dist + peso
            if nova_dist < distancias[vizinho]:
                distancias[vizinho] = nova_dist
                predecessores[vizinho] = atual
                heapq.heappush(fila, (nova_dist, vizinho))

    caminho = []
    atual = fim
    while atual is not None:
        caminho.insert(0, atual)
        atual = predecessores[atual]

    if distancias[fim] == float('infinity'):
        return "Caminho não encontrado", float('infinity')
    return caminho, distancias[fim]

🔍 Exemplo na Prática

Vamos calcular o menor caminho de Cidade 1 até Cidade 7:

caminho, custo = dijkstra(grafo, 'Cidade 1', 'Cidade 7')
print("Caminho:", caminho)
print("Custo total:", custo)

🧭 Resultado:

Caminho: ['Cidade 1', 'Cidade 2', 'Cidade 4', 'Cidade 3', 'Cidade 5', 'Cidade 7']
Custo total: 205

Os pontos intermediários (excluindo início e fim) são:

['Cidade 2', 'Cidade 4', 'Cidade 3', 'Cidade 5']

🧠 Por que isso é útil?

Esse tipo de solução tem aplicações em:

  • Sistemas de navegação (como Waze e Google Maps)

  • Planejamento logístico

  • Redes de computadores (roteamento)

  • Inteligência Artificial e Jogos


🔗 Conclusão

O algoritmo de Dijkstra é uma ferramenta essencial para encontrar caminhos mínimos em grafos com pesos positivos. E com uma simples implementação em Python, conseguimos resolver um problema de mundo real de forma elegante e eficiente.

Se você curte algoritmos e quer continuar explorando grafos, IA e otimização, siga nosso blog e deixe seu comentário! 🚀


 

Brasil Rumo ao Hexa na Copa do Mundo 2026

  Copa do Mundo de 2026 

A Copa do Mundo de 2026 promete ser um marco na história do futebol, com a participação de 48 seleções e sediada por três países: Estados Unidos, Canadá e México. Com um novo formato e mais jogos, o torneio oferece uma oportunidade única para as equipes mostrarem seu talento em escala global.

Brasil: Tradição e Expectativa

O Brasil, cinco vezes campeão mundial, busca o tão sonhado hexacampeonato. Mesmo enfrentando desafios recentes, a Seleção Brasileira é vista como uma das favoritas ao título, com odds médias de 7.0, ao lado de França e Espanha . A chegada do técnico Carlo Ancelotti traz uma nova perspectiva e esperança para os torcedores .Metrópoles+4Futebol Interior+4Blog do Torcedor+4Diario AS

Conclusão

Com uma combinação de tradição, talento e liderança experiente, o Brasil tem todos os elementos para brilhar na Copa do Mundo de 2026. A expectativa é alta, e os olhos do mundo estarão voltados para a performance da Seleção Canarinho.


🧠 Quiz: Teste seus conhecimentos sobre a Copa do Mundo 2026

  1. Quantas seleções participarão da Copa do Mundo de 2026?

    • a) 32

    • b) 36

    • c) 48

    • d) 40

  2. Em quais países será sediada a Copa do Mundo de 2026?

    • a) Brasil, Argentina e Uruguai

    • b) Estados Unidos, Canadá e México

    • c) Alemanha, França e Itália

    • d) Inglaterra, Escócia e País de Gales

  3. Qual técnico comandará a Seleção Brasileira na Copa do Mundo de 2026?

    • a) Tite

    • b) Fernando Diniz

    • c) Carlo Ancelotti

    • d) Luiz Felipe Scolari

  4. Quantas vezes o Brasil já conquistou a Copa do Mundo?

    • a) 3

    • b) 4

    • c) 5

    • d) 6

  5. Qual é a data prevista para a final da Copa do Mundo de 2026?

    • a) 11 de junho

    • b) 19 de julho

    • c) 1º de agosto

    • d) 25 de julho

Respostas: 1-c, 2-b, 3-c, 4-c, 5-b


🖼️ Imagem: Taça da Copa do Mundo com o Brasil como favorito

Taça da Copa do Mundo com o Brasil como favorito




📚 Fontes Consultadas

  1. FIFA – Informações oficiais sobre a Copa do Mundo de 2026, incluindo datas, sedes e formato do torneio:
    🔗 https://www.fifa.com/pt/tournaments/mens/worldcup/canadamexicousa2026/articles/copa-mundo-2026-tabela-jogos

  2. Futebol Interior – Análise sobre os favoritos ao título da Copa do Mundo de 2026 e a posição do Brasil nas casas de apostas:
    🔗 https://www.futebolinterior.com.br/brasil-favorito-titulo-copa-do-mundo-2026

  3. AS – Notícia sobre a chegada de Carlo Ancelotti ao comando técnico da Seleção Brasileira e suas expectativas para a Copa:
    🔗 https://as.com/futbol/internacional/locura-con-ancelotti-en-brasil-n

  4. Globo Esporte – Informações históricas e curiosidades sobre a Taça da Copa do Mundo:
    🔗 https://ge.globo.com/futebol/copa-do-mundo/noticia/2022/11/24/taca-da-copa-do-mundo-veja-peso-historia-e-mais.ghtml

Atualização de Caractere em Posição Específica de um Campo Texto

 Contexto

Em alguns sistemas, algumas informações são armazenadas em campos do tipo texto, onde cada caractere representa uma permissão ou flag específica.

 Por exemplo, o campo permissoes_acesso da tabela tb_rotina_app pode conter uma sequência como SNSns, onde cada posição indica um tipo de permissão.

Solução

Para realizar essa atualização, utilizamos a função STUFF do SQL Server, que permite substituir um caractere em uma posição específica dentro de uma string. 

O exemplo abaixo demonstra como atualizar o caractere na posição 250 do campo permissoes_acesso para 'S':

DECLARE @posicao INT;
SET @posicao = 250;

UPDATE tb_rotina_app 
SET permissoes_acesso = 
    STUFF(permissoes_acesso, @posicao, 1, 'S')
WHERE LEN(permissoes_acesso) >= @posicao;

---CASO A POSIÇÃO AINDA NÃO FOI USADA
UPDATE tb_rotina_app 
SET permissoes_acesso = permissoes_acesso+'S'
WHERE LEN(permissoes_acesso) <= @posicao;

Explicação do Script

@posicao: Variável que define a posição do caractere a ser alterado.
STUFF(permissoes_acesso, @posicao, 1, 'S'): Substitui o caractere na posição indicada por 'S'.
WHERE LEN(permissoes_acesso) >= @posicao: Garante que apenas os registros com comprimento suficiente sejam atualizados, evitando erros.

Considerações

Esse procedimento é útil em cenários onde permissões são controladas por meio de sequências de caracteres, facilitando a manutenção e atualização de permissões de forma automatizada e segura.