2013-03-02 4 views
-1

파일에서 데이터를 읽고 그래프를 구성하고 싶습니다. 저는 모든 것을했습니다. 모든 정점은 정상적으로 만들어졌지만 그래프에 추가하면 인접한 목록 (키 값이 인접한 정점의 수이고 값이 거리입니다)이 비게됩니다. 아무도 제발 내 코드의 문제점을 말해 줄 수 있습니까?그래프에 정점 추가

public class Vertex { 
private int number; 
private LinkedHashMap<Integer, Integer> adjacent; 

public Vertex(int num) { 
    this.number = num; 
    this.adjacent = new LinkedHashMap<Integer, Integer>(); 
} 

}

public class Graph { 
private ArrayList<Vertex> vertices; 
private int verticesSize = 201; 

public Graph() { 
    Vertex initialVertex = new Vertex(0); 
    this.vertices = new ArrayList<Vertex>(); 
    for(int i = 0; i < verticesSize; i++) { 
     vertices.add(i, initialVertex); 
    } 

} 

}

public class Test { 

public static void printGraph(Graph graph) { 
    for(int i = 0; i < graph.getVerticesSize(); i++) 
      System.out.println(graph.getVertices().get(i)); 
} 

public static void main(String[] args) throws IOException { 
    FileInputStream fStream = new FileInputStream("C:/Lusine/Programming/Java/dijkstraData.txt"); 
    // Use DataInputStream to read binary NOT text. 
    BufferedReader bReader = new BufferedReader(new InputStreamReader(fStream)); 

    Graph graph = new Graph(); 
    String[] maps; 

    String line; 
    LinkedHashMap<Integer, Integer> currentMap = new LinkedHashMap<Integer, Integer>(); 

    while((line = bReader.readLine()) != null) { 
     maps = line.split("\t"); 
     int firstDigit = Integer.parseInt(maps[0]); 

      Vertex v = new Vertex(firstDigit); 

      for(int i = 1; i < maps.length; i++) { 
      String[] vertexDistance = maps[i].split(","); 
      int vertex = Integer.parseInt(vertexDistance[0]); 
      int distance = Integer.parseInt(vertexDistance[1]); 
      currentMap.put(vertex, distance); 
      } 

      v.setAdjacent(currentMap); 
      graph.getVertices().set(firstDigit, v); 
      System.out.println("\n" + firstDigit +"-th vertex is\n" + v); 
      currentMap.clear(); 

    } 
    printGraph(graph); 
} 

나는 V를 인쇄 할 때, 괜찮아요,하지만 그래프를 인쇄 할 때, 모든 인접한 목록은 비어 있습니다. 뭐가 문제 야?

+0

그래프에 추가 할 때 ... 어떻게됩니까? 문제를 설명하는 것을 잊었다 고 생각합니다. – cytinus

+0

오, 정말! 나는 나의 질문을 편집했다. 고마워요 – user2081119

답변

1

루프는 그래서, 당신은 모든 정점에 인접한 정점의 같은지도를 저장하고

LinkedHashMap<Integer, Integer> currentMap = new LinkedHashMap<Integer, Integer>(); 

while (...) { 
    Vertex v = new Vertex(...); 
    v.setAdjacent(currentMap); 
    currentMap.clear(); 
} 

아래로 비등, 각 반복의 끝에서 당신은 분명이지도. 그래서 분명히 모든 정점은 루프의 끝에서 같은 빈 맵을 공유합니다.

당신은 모든 반복에 새의 LinkedHashMap을 만들어야합니다

while (...) { 
    LinkedHashMap<Integer, Integer> currentMap = new LinkedHashMap<Integer, Integer>(); 
    Vertex v = new Vertex(...); 
    v.setAdjacent(currentMap); 
} 

그리고 당신은 그것을 삭제 cince, 음 ... 그것을 지우고 분명히해야하지.

+0

일했습니다! 고맙습니다! – user2081119