Ошибка выполнения «подсчета» метода невзвешенного графа

#java #graph #nodes

#java #График #узлы

Вопрос:

Мое задание — создать ненаправленный, невзвешенный класс graph под названием Graph. Моя вторая часть заключается в создании метода ‘count’, которому передается объект Graph в качестве аргумента и возвращает количество подключенных компонентов в графике.

По какой-то причине всякий раз, когда я запускаю этот метод «count», я получаю возвращаемое ‘Я ожидаю’1’. Я думаю, что моя ошибка связана с моим методом ‘getToVertices’, который говорит, что все эти узлы подключены, хотя я не верю, что я сделал их подключенными целенаправленно. Прилагается мой метод getToVertices и мой метод «count».

Предполагается, что он возвращает 3 подключенных узла и 2 несвязанных узла. Я что-то упускаю?

 public QueueInterface<T> getToVertices(T vertex)
  // Returns a queue of the vertices that vertex is adjacent to.
  {
    QueueInterface<T> adjVertices = new LinkedQueue<T>();
    int fromIndex;
    int toIndex;
    fromIndex = indexIs(vertex);
    for (toIndex = 0; toIndex < numVertices; toIndex  )
      if (edges[fromIndex][toIndex] != true)
        adjVertices.enqueue(vertices[toIndex]);
    return adjVertices;
  }

public class CountCC {
    private static int count(Graph <String> graph)
    {
        int count = 0; 

          StackInterface<String> stack = new LinkedStack<String>();
          QueueInterface<String> vertexQueue = new LinkedQueue<String>();

          String currVertex;      // vertex being processed
          String adjVertex;   
          String startVertex;

          graph.clearMarks();


        while(graph.getUnmarked() != null)
        {
            startVertex = graph.getUnmarked();
            graph.markVertex(startVertex);
            stack.push(startVertex);

              do
              {
                currVertex = stack.top();
                stack.pop();
                System.out.println(currVertex);
                vertexQueue = graph.getToVertices(currVertex);


                while (!vertexQueue.isEmpty())
                  {
                    adjVertex = vertexQueue.dequeue();

                    if (!graph.isMarked(adjVertex))
                    {
                      graph.markVertex(adjVertex);
                      stack.push(adjVertex);
                    }
                  }

              } while (!stack.isEmpty());
              count  ;
              System.out.println(graph.getUnmarked());  


        }
        return count; 
    }


public static void main(String[] args) {

Graph<String> graph1=new Graph<String>();

String s0 = new String("0   ");
String s1 = new String("1    ");
String s2 = new String("2    ");
String s3 = new String("3    ");
String s4 = new String("4    ");

graph1.clearMarks();

graph1.addVertex(s0);
graph1.addVertex(s1);
graph1.addVertex(s2);
graph1.addVertex(s3);
graph1.addVertex(s4);

graph1.addEdge(s0, s1);
graph1.addEdge(s1, s2);
graph1.addEdge(s2, s0);

System.out.println("I expect "  count(graph1)); 

}
}
  

Комментарии:

1. Будет сложно помочь, не видя Graph класс.

2. Вы абсолютно правы @JimGarrison. В итоге я исправил метод в своем классе Graph. Я скоро удалю этот вопрос.