Lendo arquivo txt em java

1 resposta
E

Olá pessoal, sou novo aqui e na linguagem também. O problema é o seguinte, eu fiz uma aplicação em java para simular o caminho em uma rede e usei como base o teorema de dijikastra, ele tem os valores dos nós fixos e me gera o menor caminho de um nó pra outro. Depois de muita luta consegui fazer ele funcionar, mas agora preciso que ele leia os nos de um arquivo txt e me mostre o resultado dentro de um outro arquivo txt. Li sobre o assunto mas não consegui entender como aplicar isso no codigo. Tentei fazer a saida mas ta dando erro. Espeo que possam me ajudar.

1 Resposta

E

o código é esse, ta meio tosco mais funciona.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.PriorityQueue;

import java.util.List;

import java.util.ArrayList;

import java.util.Collections;

class Vertice implements Comparable<Vertice> {

    public final String nome;
    public Aresta[] adjacentes;
    public double menorDistancia = Double.POSITIVE_INFINITY;//menor distância da fonte para este vértice no gráfico. Ele é inicializado com o infinito positivo
    public Vertice anterior;

    public Vertice(String argNome) {
        nome = argNome;
    }

    public String toString() {
        return nome;
    }

    public int compareTo(Vertice outro) {
        return Double.compare(menorDistancia, outro.menorDistancia);
    }
}

class Aresta//Esta classe armazena seu valor e vértice de destino (o vértice aponta para):
{

    public final Vertice destino;
    public final double valor;

    public Aresta(Vertice argDestino, double argValor) {
        destino = argDestino;
        valor = argValor;
    }
}
//o metodo possui duas partes: o primeiro passo é o calculo da distância mínima da fonte para cada vértice do grafo.
//O segundo passo é o calculo do menor caminho entre o vertice de origem e o de destino. 

class Dijkstra {
    //toma como entrada o vértice origem da qual todos os caminhos mais 
    //curtos são encontrados.
    public static void calculaRotas(Vertice origem)  {
        origem.menorDistancia = 0.;
        PriorityQueue<Vertice> verticeQueue = new PriorityQueue<Vertice>();//visita os vértices na ordem de menor distância. 
        verticeQueue.add(origem);

        while (!verticeQueue.isEmpty()) {
            Vertice u = verticeQueue.poll();

            // visita cada aresta saindo de u

            for (Aresta e : u.adjacentes) {
                Vertice v = e.destino;
                double valor = e.valor;
                double distanciaEntreU = u.menorDistancia + valor;
                if (distanciaEntreU < v.menorDistancia) {
                    verticeQueue.remove(v);

                    v.menorDistancia = distanciaEntreU;
                    v.anterior = u;
                    verticeQueue.add(v);
                    
 
                }

            }
        }
    }

    public static List<Vertice> getShortestPathTo(Vertice destino) {
        List<Vertice> caminho = new ArrayList<Vertice>();
        for (Vertice vertice = destino; vertice != null; vertice = vertice.anterior) {
            caminho.add(vertice);
        }

        Collections.reverse(caminho);
        return caminho;
    }
    
    
//classe de inicialização 
    public static void main(String[] args) throws FileNotFoundException {
        File txt = new File("c:\texto.txt");  
        try{  
        if(txt.createNewFile())  
            System.out.println("criado txt");  
        else  
            System.out.println("aquivo ja existe");  
        }catch(IOException ioex)  
        {  
        }  
        
        Vertice v0 = new Vertice("P1");
        Vertice v1 = new Vertice("P2");
        Vertice v2 = new Vertice("P3");
        Vertice v3 = new Vertice("P4");
        Vertice v4 = new Vertice("P5");
        Vertice v5 = new Vertice("P6");
        Vertice v6 = new Vertice("P7");
        v0.adjacentes = new Aresta[]{new Aresta(v1, 10),//aqui é onde coloco as distancias entre os pontos
            new Aresta(v5, 15)};
        v1.adjacentes = new Aresta[]{new Aresta(v0, 75),
            new Aresta(v2, 42),
            new Aresta(v3, 10)};
        v2.adjacentes = new Aresta[]{new Aresta(v1, 38)};
        v3.adjacentes = new Aresta[]{new Aresta(v1, 14),
            new Aresta(v5, 44),
            new Aresta(v6, 79)};
        v4.adjacentes = new Aresta[]{new Aresta(v5, 04)};
        v5.adjacentes = new Aresta[]{new Aresta(v0, 77),
            new Aresta(v3, 05),
            new Aresta(v4, 47),
            new Aresta(v6, 63)};
        v6.adjacentes = new Aresta[]{new Aresta(v3, 24),
            new Aresta(v5, 94)};
        Vertice[] vertices = {v0, v1, v2, v3, v4, v5, v6};

        PrintWriter saida = new PrintWriter("c://rotas.txt"); // Definição do arquivo de saida

        calculaRotas(v0);
        for (Vertice v : vertices) {
            System.out.println("Distancia de " + v + ": " + v.menorDistancia);
            List<Vertice> caminho = getShortestPathTo(v);
            System.out.println("caminho: " + caminho);
        }

    }
Criado 19 de junho de 2011
Ultima resposta 19 de jun. de 2011
Respostas 1
Participantes 1