package graph.utils;
import graph.Graph;
import graph.model.Edge;
import graph.model.Vertex;
import graph.model.directed.DirectedEdge;
import graph.model.directed.DirectedVertex;
import graph.representation.directed.DirectedWeightedGraph;
import java.util.ArrayList;
import java.util.List;
public class GraphInputInitializer {
public List<Vertex> vertices;
public List<Edge> edges;
public Graph graph;
private int searchMaximumVertexIndex(List<List<Integer>> input) {
//vertices are indexed from 1
int maximalIndexValue = 0;
for (List<Integer> line : input) {
if (line.get(0) > maximalIndexValue) {
maximalIndexValue = line.get(0);
}
if (line.get(1) > maximalIndexValue) {
maximalIndexValue = line.get(1);
}
}
return maximalIndexValue;
}
public Graph initialize(List<List<Integer>> input) {
this.graph = new DirectedWeightedGraph();
vertices = new ArrayList();
edges = new ArrayList();
int maximalIndexValue = searchMaximumVertexIndex(input);
for (int i = 0; i < maximalIndexValue; i++) {
Vertex v = new DirectedVertex(i);
vertices.add(v);
}
int i = 0;
for (List<Integer> line : input) {
Edge edge = new DirectedEdge(i++ ,vertices.get(line.get(0) - 1), vertices.get(line.get(1) - 1), line.get(2), line.get(3));
edges.add(edge);
}
graph.addVertices(vertices);
graph.addEdges(edges);
return graph;
}
}