forked from jainaman224/Algo_Ds_Notes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CVSCargador.java
124 lines (101 loc) · 3.56 KB
/
CVSCargador.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package kruskal;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CVSCargador {
private BufferedReader lector = null;
public CVSCargador(String ruta) {
try {
this.lector = new BufferedReader(new FileReader(ruta));
} catch (FileNotFoundException ex) {
System.out.println("File not found");
}
}
public Grafo carga() {
String line = readLine();
String[] splitLine;
Arista arista;
Vertice a, b;
AristContainer contAristas = new AristContainer();
VerticesSet vertices = new VerticesSet();
while (line != null) {
//si comienza por # es un comentario y nos lo saltamos
if ((line.length() > 0) && (line.charAt(0) != '#')) {
splitLine = line.split(",");
a = translateLineToVertice(splitLine, 0);
b = translateLineToVertice(splitLine, 1);
if (a != null && b != null) {
if (vertices.contains(a)) {
a = vertices.getVertice(a.getId());
}
if (vertices.contains(b)) {
b = vertices.getVertice(b.getId());
}
a.link(b);
b.link(a);
}
vertices.addVertice(a);
vertices.addVertice(b);
arista = genArista(splitLine);
if (arista != null) {
contAristas.addArista(arista);
}
}
line = readLine();
}
Grafo resultado = new Grafo(vertices.size());
resultado.addAristsContainer(contAristas);
resultado.addVerticesSet(vertices);
return resultado;
}
private String readLine() {
String line;
try {
line = lector.readLine();
} catch (IOException ex) {
line = null;
}
return line;
}
private Integer[] traduceLinea(String[] lineaPartida) {
//si es Inf entonces no existe arista pero existen los vértices
for (int i = 0; i < lineaPartida.length; i++) {
if (lineaPartida[i].equalsIgnoreCase("Inf")) {
lineaPartida[i] = "-1";
}
}
Integer[] resultado = {
Integer.parseInt(lineaPartida[0]),
Integer.parseInt(lineaPartida[1]),
Integer.parseInt(lineaPartida[2])
};
if (resultado[0] < 0) {
resultado[0] = null;
} else if (resultado[1] < 0) {
resultado[1] = null;
} else if (resultado[2] < 0) {
resultado[2] = null;
}
return resultado;
}
private Vertice translateLineToVertice(String[] lineaPartida, int i) {
if (Character.isDigit(lineaPartida[i].charAt(0))) {
return new Vertice(Integer.parseInt(lineaPartida[i]));
}
return null;
}
private Arista genArista(String[] lineaPartida) {
Integer[] lineaTraducida = traduceLinea(lineaPartida);
if (lineaTraducida[0] != null
&& lineaTraducida[1] != null
&& lineaTraducida[2] != null) {
return new Arista(
lineaTraducida[0],
lineaTraducida[1],
lineaTraducida[2]
);
}
return null;
}
}