·

Sistemas de Informação ·

Estrutura de Dados

Send your question to AI and receive an answer instantly

Ask Question

Recommended for you

Preview text

Escreva um programa em Java para determinar a rota entre duas cidades e a distância que deverá ser percorrida supondo distâncias em quilômetros O programa em Java deverá executar as seguintes funcionalidades a 30 Inserir novas cidades no mapa origem destino e distância As cidades deverão ter caminho de ida e volta Considerar que a distância será em quilômetros b 70 Calcular e exibir a rota e a distância entre duas cidades fornecidas pelo usuário da aplicação A aplicação deverá ser implementada usando janelas gráficas para interação com o usuário da aplicação import javautil import javaxswingJOptionPane class Aresta private String origem private String destino private int distancia public ArestaString origem String destino int distancia thisorigem origem thisdestino destino thisdistancia distancia public String getOrigem return origem public String getDestino return destino public int getDistancia return distancia class Grafo private MapString ListAresta adjacencias public Grafo thisadjacencias new HashMap public void adicionarArestaAresta aresta adjacenciasputIfAbsentarestagetOrigem new ArrayList adjacenciasgetarestagetOrigemaddaresta public int calcularValorMinimoString origem String destino StringBuilder caminhoIda StringBuilder caminhoVolta MapString Integer valoresMinimos new HashMap MapString String anteriores new HashMap SetString visitados new HashSet Inicializa todos os valores mínimos como infinito for String cidade adjacenciaskeySet valoresMinimosputcidade IntegerMAXVALUE valoresMinimosputorigem 0 anterioresputorigem null while visitadoscontainsdestino String cidadeAtual null int menorValor IntegerMAXVALUE Encontra a cidade não visitada com o menor valor mínimo for MapEntryString Integer entry valoresMinimosentrySet String cidade entrygetKey int valorMinimo entrygetValue if visitadoscontainscidade valorMinimo menorValor cidadeAtual cidade menorValor valorMinimo if cidadeAtual null break Não há mais cidades alcançáveis encerra o loop visitadosaddcidadeAtual Atualiza os valores mínimos das cidades vizinhas if adjacenciascontainsKeycidadeAtual for Aresta aresta adjacenciasgetcidadeAtual String cidadeVizinha arestagetDestino int distancia arestagetDistancia int valorMinimoVizinho valoresMinimosgetcidadeAtual distancia if valorMinimoVizinho valoresMinimosgetcidadeVizinha valoresMinimosputcidadeVizinha valorMinimoVizinho anterioresputcidadeVizinha cidadeAtual String cidadeAtual destino caminhoIdainsert0 cidadeAtual while anterioresgetcidadeAtual null cidadeAtual anterioresgetcidadeAtual caminhoIdainsert0 caminhoIdainsert0 cidadeAtual cidadeAtual destino caminhoVoltaappendcidadeAtual while cidadeAtualequalsorigem cidadeAtual anterioresgetcidadeAtual caminhoVoltaappend caminhoVoltaappendcidadeAtual return valoresMinimosgetdestino public class Main public static void mainString args Criação do grafo Grafo grafo new Grafo Adição das arestas grafoadicionarArestanew ArestaA B 6 grafoadicionarArestanew ArestaB A 6 grafoadicionarArestanew ArestaA C 2 grafoadicionarArestanew ArestaC A 2 grafoadicionarArestanew ArestaC B 1 grafoadicionarArestanew ArestaB C 1 grafoadicionarArestanew ArestaC D 2 grafoadicionarArestanew ArestaD C 2 grafoadicionarArestanew ArestaC F 3 grafoadicionarArestanew ArestaF C 3 grafoadicionarArestanew ArestaF D 2 grafoadicionarArestanew ArestaD F 2 grafoadicionarArestanew ArestaF E 4 grafoadicionarArestanew ArestaE F 4 grafoadicionarArestanew ArestaD E 2 grafoadicionarArestanew ArestaE D 2 grafoadicionarArestanew ArestaB D 4 grafoadicionarArestanew ArestaD B 4 Solicitação das cidades de origem e destino ao usuário String origem JOptionPaneshowInputDialogDigite a cidade de origem String destino JOptionPaneshowInputDialogDigite a cidade de destino StringBuilder caminhoIda new StringBuilder StringBuilder caminhoVolta new StringBuilder Cálculo do valor mínimo das cidades e obtenção dos caminhos int valorMinimo grafocalcularValorMinimoorigem destino caminhoIda caminhoVolta if valorMinimo IntegerMAXVALUE JOptionPaneshowMessageDialognull Distância valorMinimo km Caminho de ida caminhoIdatoString Caminho de volta caminhoVoltatoString else JOptionPaneshowMessageDialognull Não foi possível encontrar um caminho entre as cidades