br.eb.ime.labprog3.tam.GeradorGrafoDijkstra.java Source code

Java tutorial

Introduction

Here is the source code for br.eb.ime.labprog3.tam.GeradorGrafoDijkstra.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.eb.ime.labprog3.tam;

import br.eb.ime.labprog3.dijkstraimplementation.Dijkstra;
import br.eb.ime.labprog3.dijkstraimplementation.Edge;
import br.eb.ime.labprog3.dijkstraimplementation.Graph;
import br.eb.ime.labprog3.dijkstraimplementation.Vertex;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.core.io.Resource;

/**
 *
 * @author arthurfernandes
 */
public class GeradorGrafoDijkstra {

    private final List<Aeroporto> aeroportos;
    private final List<Trecho> trechos;

    public GeradorGrafoDijkstra(List<Aeroporto> aeroportos, List<Trecho> trechos) {
        this.aeroportos = aeroportos;
        this.trechos = trechos;
    }

    //Os indexes comeam em 1
    List<Aeroporto> geraMenorCaminho(int indexAeroportoOrigem, int indexAeroportoDestino) {
        Vertex[] vertexAeroportos = new Vertex[aeroportos.size()];
        Edge[] edgeTrechos = new Edge[trechos.size()];

        for (int i = 0; i < vertexAeroportos.length; i++) {
            //Index comeando em 1
            vertexAeroportos[i] = new Vertex(i + 1);
        }

        for (int i = 0; i < edgeTrechos.length; i++) {
            Trecho trecho = trechos.get(i);

            int indexDestino = trecho.getIdAeroportoDestino();
            int indexOrigem = trecho.getIdAeroportoOrigem();
            System.out.println(indexOrigem + " -> " + indexDestino);
            int preco = (int) trecho.getPreco();

            if (indexDestino > 0 && trecho.getIdAeroportoOrigem() > 0) {
                edgeTrechos[i] = new Edge(vertexAeroportos[indexOrigem - 1], vertexAeroportos[indexDestino - 1],
                        preco);

                vertexAeroportos[indexOrigem - 1].addEdge(edgeTrechos[i]);
            }
        }

        Graph graph = new Graph();
        for (int i = 0; i < vertexAeroportos.length; i++)
            graph.addVertex(vertexAeroportos[i]);

        Dijkstra dijkstra = new Dijkstra();
        Graph result = new Graph();
        result = dijkstra.doDijkstra(vertexAeroportos[indexAeroportoOrigem - 1],
                vertexAeroportos[indexAeroportoDestino - 1], graph);

        List<Vertex> vertices = new ArrayList<Vertex>();
        vertices = result.getGraph();

        //List<Edge> edgeTrechosResultado = dijkstra.getDijkstraEdges();

        List<Aeroporto> aeroportosCaminho = new ArrayList<>();
        for (int i = 0; i < vertices.size(); i++) {
            int id = vertices.get(i).getId();
            String sigla = aeroportos.get(id - 1).getSigla();
            String nome = aeroportos.get(id - 1).getNome();
            Aeroporto aeroporto = new Aeroporto(id, sigla, nome);
            aeroportosCaminho.add(aeroporto);
        }

        /*
        List<Trecho> trechosResultado = new ArrayList<>();
        for(int i =0;i<edgeTrechosResultado.size();i++){
        int idTrecho = edgeTrechosResultado.get(i).getWeight();
        Trecho trecho = new Trecho(0, indexAeroportoOrigem, indexAeroportoDestino, "", preco, "");
        }*/
        return aeroportosCaminho;
    }

    public static void main(String args[]) {
        String fileNameTrechos = "rotas.xml";
        String fileNameAeroportos = "aeroportos.xml";

        File aeroportos = new File(fileNameAeroportos);
        File trechos = new File(fileNameTrechos);

        Resource resource = null;
        TrechoDAO daoTrecho = null;
        AeroportoDAO daoAeroporto = null;

        daoTrecho = new TrechoDAO(trechos);

        daoAeroporto = new AeroportoDAO(aeroportos);

        int indexOrigem = 4;
        int indexDestino = 23;

        List<Aeroporto> listaDeAeroportos = daoAeroporto.listarAeroportos();
        List<Trecho> listarTrechos = daoTrecho.listarTrechos();
        GeradorGrafoDijkstra geradorDeGrafo = new GeradorGrafoDijkstra(daoAeroporto.listarAeroportos(),
                daoTrecho.listarTrechos());
        List<Aeroporto> listaDeAeroportosDestino = geradorDeGrafo.geraMenorCaminho(indexOrigem, indexDestino);
        System.out.println(listaDeAeroportosDestino.size());
        System.out.println("Origem: " + listaDeAeroportos.get(indexOrigem - 1).getId() + " : "
                + listaDeAeroportos.get(indexOrigem - 1).getNome());
        System.out.println("Destino: " + listaDeAeroportos.get(indexDestino - 1).getId() + " : "
                + listaDeAeroportos.get(indexDestino - 1).getNome());
        for (Aeroporto aeroporto : listaDeAeroportosDestino) {
            System.out.println(aeroporto.getId() + " : " + aeroporto.getNome());
        }

    }
}