#java #graph #depth-first-search
#java #График #поиск в глубину
Вопрос:
Я пытаюсь реализовать список смежности для невзвешенного графика и несколько вопросов / проблем. я понимаю, что мне нужен связанный список для хранения ребер и массив для хранения вершин.В настоящее время у меня есть (базовый) класс Node и класс Graph, который заботится о добавлении ребер к определенной вершине. Однако это явно не определяет связанный список для ребер. Я хочу создать DFS и BFS, и мне было интересно, как мне это сделать? Нужно ли мне изменить код, который у меня уже есть, чтобы включить эти методы или сейчас. Помощь будет оценена.
// Inside the graph class
public boolean insertNode(NodeRecord n) {
int j;
if (isFull()) return false;
for (j=0; j<arraySize; j )
if (node[j]==null)
break;
node[j] = new Node(n);
graphSize ;
return true;
}
public boolean insertEdge(int nodeID, EdgeRecord e) {
int j;
for (j=0; j<arraySize; j )
if (nodeID==((NodeRecord) node[j].item).getID())
break;
if (j>=arraySize) return false;
node[j].next = new Node(e, node[j].next);
return true;
}
// inside the node class
class Node<E> {
E item;
Node<E> next;
Node(E e) {
item = e;
next = null;
}
Node(E e, Node<E> newNext) {
item = e;
next = newNext;
}
Node(Node<E> n) { // copy constructor
item = n.item;
next = n.next;
}
}
public static void depthFirst(){
for(int i=0;i<mygraph.arraySize;i ){
Node counter =mygraph.node[i];
while(counter!=null){
System.out.println(" " counter.item);
counter= counter.next;
}
}
}
Ответ №1:
Несколько замечаний по вашему коду:
-
Вы используете массив фиксированного размера для хранения ваших узлов. Переключитесь на arraylist, который автоматически увеличивается при добавлении новых узлов.
-
Правильно ли я понимаю, что у вас может быть только одно ребро, выходящее из вашего узла (
next
)? Здесь также следует использовать список. -
Пока ваш график не направлен, позаботьтесь о том, чтобы ребро, идущее от A к B, также шло от B к A, и, таким образом, вы должны добавить его в списки ребер узла A и узла B.
Комментарии:
1. Ввод исправлен, поэтому мне действительно не нужен arraylist. Я понимаю вашу точку зрения по поводу проблемы со связанным списком, и это был один из моих вопросов, который я опубликовал выше. Однако я обнаружил, что могу получить доступ ко всем ребрам определенного узла, используя простой цикл, поэтому у меня на самом деле нет связанного списка. Код устраняет ненаправленную проблему. Мой вопрос заключается в том, как приступить к кодированию методов DFS и BF