Я пытаюсь написать алгоритм, который определяет, связан ли граф или нет.Я думаю, что мой код почти правильный, хотя я продолжаю получать StackOverFlowError.Я лично думаю, что из-за цикла в графе, с которым я тестирую свой алгоритм, мой код этого не понимает и зацикливается.Но я использую массив, чтобы увидеть, был ли узел уже посещен!Так что этого не должно случиться!В любом случае это мой код:
public int isConnected(String s)
{
int in = nodes.indexOf(s);
visited[in] = true;
counter++;
for(int i = 0; i < listOfChildren(s).size(); i++)
{
int ind = nodes.indexOf(listOfChildren(s).get(i));
if(visited[ind] == false)
{
isConnected(listOfChildren(s).get(i));
}
}
System.out.println(counter);
if(counter == nodes.size())
return 1;
return 0;
}
s - это какой-то узел, с которого я начинаю, узлы - это ArrayList узлов и имеет тот же размер (в нашем случае 5), что и посещаемый массив.В начале посещение выглядит следующим образом: [false false false false false false], поэтому ни один из узлов не был посещен.listOfChildren () возвращает ArrayList дочерних элементов (не всех, а только соседних с узлом) определенного узла.Я уверен, что listOfChildren () работает, так как я тестировал его 43545454 раза.
Любая помощь приветствуется (с минимальным изменением кода, если это возможно).Спасибо.
ОБНОВЛЕНИЕ:
Мой график направлен ..
Я определяю посещение так:
private boolean[] visited;
иЯ установил все в нем на false в моем конструкторе этот код:
public void setUnvisited()
{
visited = new boolean[nodes.size()];
for(int i = 0; i < nodes.size(); i++)
{
visited[i] = false;
}
}
Узлы являются строками!посещенные и узлы имеют одинаковую длину.Вот почему я могу использовать node.indexOf (blabla) для посещаемого массива.
UPDATE2:
Вот как выглядит график:
Уверен, проблема в том, что после N3 алгоритм зацикливается после N3, потому что он не понимает, что N1 уже был посещен.Я действительно не понимаю, почему это происходит!
UPDATE3
Строка имеет разные имена и не имеет дубликатов .. так, например, indexOf (node.get (2))) дает 2, а не 0 или что-нибудь еще ..
Проблема в том, что после посещения N3 алгоритм должен остановиться и вернуть 0 или 1, но я не знаю, как это сделать :)