В настоящее время для любого Edge (x, y) в мой список смежности добавляется только вершина y. Если бы у меня был другой Edge (z, x), он только показывает, что y является соседом x, тогда как y и z должны быть соседями x. Я попытался использовать два хеш-карты, один для начальной вершины, один для конечной вершины, а затем объединить эти два списка смежности, но это ничего не изменило. Этот пример в настоящее время находится в моем методе CalculatesSource (), одном из методов ниже. Любые идеи с благодарностью!
public class ReadInput {
Vertex[] vertex = new Vertex[25252];
final String DELIMITER = ",";
int indexVertex = 0;
public Edge[] edge = new Edge[127807];
int indexEdge = 0;
private Map<Integer, Vertex> VertexHash = new HashMap();
//private Map<Integer, List <Edge>> EdgeHash = new HashMap();
private Map<Integer, Edge> EdgeHashStart = new HashMap();
private Map<Integer, Edge> EdgeHashEnd = new HashMap();
public Graph readFromStream() throws NumberFormatException, IOException {
Graph graph = new Graph();
//25252 number of elements in Place.txt file
System.out.println("Reading in Data......");
//Delimiter used in CSV file
String line = "";
//Create the file reader
BufferedReader fileReader = new BufferedReader(new FileReader("Place.txt"));
String IDString = null;
String name = null;
int ID = 0;
//Read the file line by line
while ((line = fileReader.readLine()) != null)
{
//Get all tokens available in line
String[] tokens = line.split(DELIMITER);
IDString = tokens[0];
name = tokens[1];
ID = Integer.parseInt(IDString);
vertex[indexVertex] = new Vertex(ID,name);
VertexHash.put(ID, vertex[indexVertex]);
graph.addVertex(ID,name);
indexVertex++;
}
fileReader.close();
String line2 = "";
BufferedReader fileReader2 = new BufferedReader(new FileReader("Road.txt"));
String valueString = null;
String vertex1IDName = null;
String vertex2IDName = null;
String extra = null;
float value = 0;
int vertex1ID = 0;
int vertex2ID = 0;
//Read the file line by line
while ((line2 = fileReader2.readLine()) != null)
{
//Get all tokens available in line
String[] tokens2 = line2.split(DELIMITER);
vertex1IDName = tokens2[0];
vertex2IDName = tokens2[1];
valueString = tokens2[2];
if(tokens2.length - 1 == 3) {
extra = tokens2[tokens2.length - 1];
}
else {
extra = "";
}
vertex1ID = Integer.parseInt(vertex1IDName);
vertex2ID = Integer.parseInt(vertex2IDName);
value = Float.parseFloat(valueString);
Vertex v1 = new Vertex(0, " ");
Vertex v2 = new Vertex(0, " ");
if(VertexHash.containsKey(vertex1ID) ) {
v1 = VertexHash.get(vertex1ID);
}
else if(vertex1ID != 0 && (VertexHash.containsKey(vertex1ID) == false)) {
v1.setID(vertex1ID);
}
if(VertexHash.containsKey(vertex2ID)) {
v2 = VertexHash.get(vertex2ID);
}
else if(vertex2ID != 0 && (VertexHash.containsKey(vertex2ID) == false)) {
v2.setID(vertex2ID);
}
if(v1.getID() != 0 && v2.getID() !=0) {
edge[indexEdge] = new Edge(value,v1, v2, extra);
EdgeHashStart.put(v1.getID(),edge[indexEdge]);
EdgeHashEnd.put(v2.getID(),edge[indexEdge]);
v1.addNeighbour(edge[indexEdge]);
//adding v2 as a neighbor just adds the actualVertex being worked on "x" to the adj list
//v2.addNeighbour(edge[indexEdge]);
graph.addEdge(value,v1, v2, extra);
indexEdge++;
}
}
fileReader2.close();
return graph;
}
public Vertex calcualteDestination() {
Scanner scanUserInput = new Scanner(System.in);
System.out.println("Enter the Destination Name:");
String destinationName = scanUserInput.nextLine();
scanUserInput.close();
Vertex Destination = new Vertex(0,null);
for(int i = 0; i<indexVertex; i++) {
if(destinationName.equals(vertex[i].getName())){
Destination.setID(vertex[i].getID());
Destination.setName(vertex[i].getName());
}
}
for(int k = 0; k<indexEdge; k++) {
if(Destination.getID() == edge[k].getTargetVertex().getID()){
Destination.setID(edge[k].getTargetVertex().getID());
Destination.setAdjacenciesList(edge[k].getTargetVertex().getAdjacenciesList());
}
}
return Destination;
}
public Vertex calculatesSource() {
Scanner scanUserInput = new Scanner(System.in);
System.out.println("Enter the Source Name:");
String sourceName = scanUserInput.nextLine();
Vertex Source = new Vertex(0, null);
for(int i = 0; i<indexVertex; i++) {
if(sourceName.equals(vertex[i].getName())){
Source.setID(vertex[i].getID());
Source.setName(vertex[i].getName());
}
}
//for(int k = 0; k<indexEdge; k++) {
//(sourceID,getAdjList)
//need to add (GetADjList,sourceID)
List<Edge> listMerge = new ArrayList<Edge>();
if(EdgeHashStart.containsKey(Source.getID())) {
//add all to adj list
listMerge.addAll(EdgeHashStart.get(Source.getID()).getStartVertex().getAdjacenciesList());
}
if(EdgeHashEnd.containsKey(Source.getID())) {
//add all to adj list
listMerge.addAll(EdgeHashEnd.get(Source.getID()).getTargetVertex().getAdjacenciesList());
}
Source.setAdjacenciesList(listMerge);
//old setADjLists code
/*if(Source.getID() == edge[k].getStartVertex().getID()){
Source.setID(edge[k].getStartVertex().getID());
Source.setAdjacenciesList(edge[k].getStartVertex().getAdjacenciesList());
}*/
//}
return Source;
}
public Vertex SetAdjList(Vertex actualVertex) {
for(int j = 0; j<edge.length-1; j++) {
if(actualVertex.getID() == edge[j].getTargetVertex().getID()){ //edge[j].getStartVertex
actualVertex.setAdjacenciesList(edge[j].getTargetVertex().getAdjacenciesList());
}
}
return actualVertex;
}