У меня есть ненаправленный связный граф. Я реализовал его с использованием матрицы смежности, которая представляет собой двумерный массив.Глубина первого поиска и поиск по ширине между двумя узлами в графе
Как я понимаю, DFS посещает дочерние узлы перед братьями и сестрами. BFS посещает братьев и сестер перед детьми.
я реализовал эти два вроде этого:
public void DFT(int firstVertex) {
connectedVertices = 0;
int v;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < numVertices; i++) {
if(vertex[i] != null){
vertex[i].setPushed(false);
}
}
stack.push(firstVertex);
connectedVertices++;
vertex[firstVertex].setPushed(true);
while(!stack.isEmpty()){
v = stack.pop();
vertex[v].visit();
for (int i = 0; i < numVertices; i++) {
if(adj[v][i] != 0 && !vertex[i].getPushed()){
stack.push(i);
connectedVertices++;
vertex[i].setPushed(true);
}
}
}
}
public void BFT(int firstVertex) {
connectedVertices = 0;
int v;
Queue<Integer> queue = new LinkedList<Integer>();
for (int i = 0; i < numVertices; i++) {
if(vertex[i] != null){
vertex[i].setPushed(false);
}
}
queue.add(firstVertex);
connectedVertices++;
vertex[firstVertex].setPushed(true);
while(!queue.isEmpty()){
v = queue.remove();
vertex[v].visit();
for (int i = 0; i < numVertices; i++) {
if(adj[v][i] != 0 && !vertex[i].getPushed()){
queue.add(i);
connectedVertices++;
vertex[i].setPushed(true);
}
}
}
}
Как эти методы принимают только один параметр, начальную вершину. Что делать, если меня попросят предоставить DFS и BFS с одного узла на другой узел? Вот простой пример подключенного неориентированного графа.
Если меня попросят выполнить DFS из D в E, будут ли они D, C, A, E или D, E. Я думал, что DFS и BFS должны посещать каждый узел, в этом случае B не может быть посещен. Я не знаю, как мне изменить свои текущие методы для удовлетворения этих требований.
Ах ОК , но если меня попросят выполнить dfs или bfs из одной вершины в другую вершину, я закончил, как только ударил вторую вершину? Или я должен продолжать и посещать оставшиеся вершины? В приведенном выше примере, независимо от того, посещу ли я сначала C или E, я не могу добраться до B, если конечная вершина равна E. Нужно ли, чтобы DFS/BFS посещали каждую вершину в подключенном компоненте? – Infodayne
@Infodayne Если вас попросят выполнить поиск (DFS или BFS) с D на E, вам следует остановиться, как только вы доберетесь до E; вам не нужно продолжать. Теоретически BFS сначала найдет вершину, если она близка к начальной точке; где DFS сначала найдет вершину, если она находится дальше от начальной точки. – Justin