#java
#Ява
Вопрос:
Я создаю класс графиков, которому нужен метод для первого поиска по ширине и другой для печати матрицы списка смежности. Мой класс вершин использует «int» для создания новой вершины, поэтому мне пришлось переходить от вершины к int и обратно, и именно здесь я столкнулся с этой проблемой. Мне нужен какой-то способ преобразования объектов вершин в списке ссылок в строку для печати, а в некоторых случаях для преобразования обратно в int (я использую метод Scanner nextInt() со строкой, но из-за того, как в списке ссылок хранятся элементы, которые вызывают исключение InputMismatchException). Приношу извинения за длинный пост, но я не был уверен, что все это потребуется для помощи, поэтому я скопировал оба метода.
public static void breadthFirstSearch(Graph G, int root) //Initializes a search of the graph using the graph and a vertex to start from (default: 0) { Vertex rootVertex = new Vertex(root); //Creates a reference to the original root vertex to be used to make a "cloud of vertices" Queuelt;Vertexgt; queue = new LinkedListlt;Vertexgt;(); //Makes a Queue that will hold the visited vertices queue.add(rootVertex); //Adds the root vertex to the Queue visitedNodes.add(rootVertex); //Adds the root vertex to the list of visited vertices since it has been visited while(!queue.isEmpty()) //This loop will be executed until the Queue is empty { String listHead = "" queue.poll() ""; System.out.println(listHead); Scanner scan = new Scanner(listHead); int vertex = scan.nextInt(); for(Vertex v : Vertex.getAdjacentVertices(vertex)) //"For every vertex in the current vertex's list of adjacent vertices" this loop will execute { if(!visitedNodes.contains(v)) //If the vertex is not in the list of visited nodes, now it is! { visitedNodes.add(v); queue.add(v); } } } String BFSorder = ""; //Initializes an empty String that will hold the list of visited vertices in the order in which they were visited for(int i = 0; i lt; visitedNodes.size(); i ) //Iterates through the list of visitedNodes { String currNode = "" visitedNodes.get(i) " "; //Transforms the current vertex into a String so it can be added to BFSorder BFSorder = BFSorder currNode; //Adds the String representing the current Node to BFSorder } System.out.println("Graph nodes visited in BFS Order: " BFSorder ""); //Prints out the list of visited vertices }
public static void print(Graph G) //This method prints out an Adjacency List Matrix using the parameter Graph { for(int i = 0; i lt; visitedNodes.size(); i ) //Iterates through the list of visited nodes { String adjVertex = "Adjacency list for vertex " visitedNodes.get(i) " Head "; //For each node, a new String is made String currVertex = "" visitedNodes.get(i) ""; //These next three lines convert the vertex to an integer so it can be used for the for loop Scanner scan = new Scanner(currVertex); int vertex = scan.nextInt(); for(Vertex v : Vertex.getAdjacentVertices(vertex)) //Goes through the list of vertices adjacent to the current Vertex { String currNode = " -gt; " v ""; //Makes the vertex into a String with special formatting adjVertex = adjVertex currNode; //Adds the new string to adjVertex } System.out.println(adjVertex); //Prints out the list of adjacent vertices for the current vertex } }
Огромное спасибо!
Комментарии:
1. Для вывода объектов на экран просто переопределите метод toString() и настройте его так, как вы хотите.
2. @Femke Спасибо, это сработало, теперь я сталкиваюсь с другими ошибками. Прогресс…?