Konvertieren von txt-Datei zu angrenzens Liste, dann Grafik

Ich bin dabei eine Breite Erste Suche Programm, das Lesen in einer Nachbarschaft-Liste-Art text-Datei, dann führen Sie das BFS auf ihn entsprechend. Ich habe Schwierigkeiten, das Lesen in den text-Datei, dann das hinzufügen von es als ein array-Liste von Knoten.

, Wie ich es für richtig, Lesen Sie jede Zeile, und ordnen Sie die verbindungen für Sie?

Habe ich ausprobiert, mein Programm durch manuelles hinzufügen von Knoten in meiner Haupt -, dann eine Grafik und darstellende BFS drauf.

Hier ist mein Knoten-Klasse:

import java.util.*;

public class Node {

        public String data; //data element
        public boolean visited=false; //flag to track the already visited node
        public List<Node> adjacentNodes = new LinkedList<Node>(); //adjacency list
//     public List adjacentNodes = new LinkedList(); //adjacency list
        public Node rootNode;

        public Node(String data){
            this.data = data;
        }

        public void addAdjacentNode(final Node node){
            adjacentNodes.add(node);
            node.adjacentNodes.add(this);
//         adjacentNodes.add(rootNode);
//         node.adjacentNodes.add(this)
        }

    }

Und hier ist mein Graph-Klasse: (Wo ich versuchte, zu Lesen in meinem text Datei ist in meinem Haupt -)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.*;


/*- enqueue the start node to a Queue
- make the start node as visited
- while queue is not empty
  - dequeue the node lets say u
  - print or whatever you want to
  - for every adjacent node v of u
      - if v is not already visited
          - mark v as visited
          - enqueue v to the Queue*/
public class Graph {

    public List nodes = new ArrayList();

    public void breadthFirstTraversal(Node rootNode){
        Queue<Node> q = new LinkedList<Node>();
//     Queue q = new LinkedList();
        q.add(rootNode);
        System.out.print(rootNode.data + " ");
//     printNode(rootNode);
        rootNode.visited=true;
        while(!q.isEmpty()){
            Node n = (Node)q.poll();
            System.out.print(n.data + " ");
            for(Node adj : n.adjacentNodes){
                if(!adj.visited){
                    adj.visited=true;
                    q.add(adj);
                }
            }
            clearNodes();
        }

    }

    private void clearNodes() {
        //TODO Auto-generated method stub
        nodes = null;   //clear nodes and set to null
    }

/*  private void printNode(Node node) {
        //TODO Auto-generated method stub
        System.out.print(node);
    }*/

    public static void main(String[] args) throws FileNotFoundException {

        Graph g = new Graph();

        Scanner scan = new Scanner(new File("Connections.txt"));   //scanner to read file
        String line = scan.nextLine();                        //read first line
        int nbLine = Integer.parseInt(line);                  //get number of lines
        ArrayList<int[]> al = new ArrayList<int[]>();        
        for(int i = 0; i < nbLine; i++) {                     //read each line
           line = scan.nextLine();
           String[] token = line.split(" ");                  //split each number into different String
           int[] points = new int[token.length - 1];          //prepare array of int[] - 1
//        int[] point = new int[];
           int[] point = new int[token.length];
        for(int j = 0; j < token.length; j++){              //skip first one
             points[j-1] = Integer.parseInt(token[j]);       //store as int
           al.add(points);                                    //save in ArrayList
        }


/*      Scanner s = new Scanner(new File("C:/Users/cantuj3/Documents/Ass 2/Connections.txt"));
        ArrayList<Node> list = new ArrayList<Node>();
        while (s.hasNext()){
            g.nodes.add(s.next());
            //list.add(g);
        }       
        s.close();*/



/*      Node frankfurt = new Node("frankfurt");
        Node mannheim = new Node("mannheim");
        Node wurzburg = new Node("wurzburg");
        Node stuttgard = new Node("stuttgard");
        Node kassel = new Node("kassel");
        Node karlsruhe = new Node("karlsruhe");
        Node erfurt = new Node("erfurt");
        Node numberg = new Node("numberg");
        Node augsburg = new Node("augsburg");
        Node munchen = new Node("munchen");

        Graph g = new Graph();

        g.nodes.add(frankfurt);
        g.nodes.add(mannheim);
        g.nodes.add(wurzburg);
        g.nodes.add(stuttgard);
        g.nodes.add(kassel);
        g.nodes.add(karlsruhe);
        g.nodes.add(erfurt);
        g.nodes.add(numberg);
        g.nodes.add(augsburg);
        g.nodes.add(munchen);

        frankfurt.addAdjacentNode(mannheim);
        frankfurt.addAdjacentNode(wurzburg);
        frankfurt.addAdjacentNode(kassel);

        mannheim.addAdjacentNode(karlsruhe);

        karlsruhe.addAdjacentNode(augsburg);

        augsburg.addAdjacentNode(munchen);

        munchen.addAdjacentNode(kassel);
        munchen.addAdjacentNode(numberg);

        wurzburg.addAdjacentNode(erfurt);
        wurzburg.addAdjacentNode(numberg);

        numberg.addAdjacentNode(stuttgard);
        g.breadthFirstTraversal(frankfurt);*/
    }

}

Hier ist meine input Datei:

01 02
02 01 03
03 02 04 05
04 03
05 03 06
06 05

Hier ist das Stück code, den ich schrieb in meinem main von selbst:

        Scanner scan = new Scanner(new File("Connections.txt"));   //scanner to read file
        String line = scan.nextLine();                        //read first line
        int nbLine = Integer.parseInt(line);                  //get number of lines
        ArrayList<int[]> al = new ArrayList<int[]>();        
        for(int i = 0; i < nbLine; i++) {                     //read each line
           line = scan.nextLine();
           String[] token = line.split(" ");                  //split each number into different String
           int[] points = new int[token.length - 1];          //prepare array of int[] - 1
//        int[] point = new int[];
           int[] point;
        for(int j = 0; j < token.length; j++){              //skip first one
             points[j-1] = Integer.parseInt(token[j]);       //store as int
           al.add(points);                                    //save in ArrayList
        }

Bin ich auf dem richtigen Weg?

  • Was bedeutet der input-Datei Aussehen? Was hast du bisher ausprobiert und welche besonderen Probleme sind, die Sie ausgeführt werden? Wie sieht das tatsächliche Verhalten abweichen vom erwarteten Verhalten?
  • Ich aktualisierte mein code und ergänzt die input-Datei,als auch als ein Stück code, den ich schrieb, versuchen, es aus, Probleme mit einer Zeile obwohl, wie oben beschrieben
  • Update! Ich entledigte dieser Fehler
InformationsquelleAutor AOE | 2014-02-23
Schreibe einen Kommentar