#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. Я скоро удалю этот вопрос.