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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre grundlegenden Schritte müssen sein:
Da ich nicht möchte, zu tun Ihre Arbeit für Sie, ich lasse Sie mit einigen Proben:
Lesen einer Zeile der Datei
Drehen, dass die Linie in ein Objekt
Diese hängt davon ab, was deine input-Datei-format aussieht. Als ein Beispiel, wenn meine Eingabe ist so etwas wie dieses:
dann könnte ich das tun:
Fügen Sie dieses Objekt zu einer Sammlung
Wiederholen, bis Sie keine weiteren Zeilen mehr zu Lesen
Hoffe, das hilft!