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.
Lendo arquivo txt em java
E
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
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo