создать ориентированный граф - PullRequest
2 голосов
/ 11 апреля 2011

я хочу создать ориентированный граф, у меня есть три переменные: строка x, y, z и первая вершина содержат 3 переменные, а следующая содержит следующие 3 до конца цикла

у меня естьэто:

BufferedReader reader = new BufferedReader(
    new StringReader(contentTextArea.getText()));

try {
  str =reader.readLine();

  while(str != null) {
    String splitted[] = str.split("\\|");
    String x = splitted[0].trim();
    String y = splitted[1].trim();
    String z = splitted[2].trim();
  }          
}

так что этот код дает мне каждый раз 3 строки, и я хочу каждый раз создавать вершину и ребро, и это будет создавать график в конце.код может быть таким, но я не знаю, что писать внутри createVertex (String x,y,z), addEdge () методов.

public class graph {  
  createVertex (String x,y,z);
  addEdge ();
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Это действительно зависит от того, как вы представляете свой график.Я бы порекомендовал использовать стороннюю библиотеку, такую ​​как JGraph или JGraphT .Если вы не можете использовать стороннюю библиотеку (например, для домашней работы или просто хотите учиться), вам нужно определить свой собственный класс Graph.

Два общих представления - это матрицы связности и списки смежности.Любое представление может работать на вас.

Создать новую вершину легко, просто вызовите addVertex на графике JGraph.Это вернет объект вершины.Вам нужно будет указать два параметра: имя и объект данных.Для имени используйте либо инкрементный номер идентификатора, либо исходную строку строки.Затем вам нужно будет создать объект данных из трех строк, при этом для меня наиболее целесообразным будет создание пользовательского объекта данных.

Я бы следил за последним вставленным узлом (начинается с нуля), а затем создавал ребра между вершинами всякий раз, когда предыдущий не равен нулю.Обязательно обновляйте предыдущую вершину при каждой итерации.

0 голосов
/ 11 апреля 2011

Если вы хотите создать линейную полосу, то есть каждая линия представляет вершину, а ребро образовано двумя последовательными вершинами, вы можете создать / использовать класс Vertex, представляющий вершину, и класс Edge, который имеет ссылку на2 вершины, которые формируют его конечные точки.

В вашем классе графа вы можете просто иметь список вершин и список ребер.createVertex() может затем просто добавить новую вершину в список, тогда как addEdge() создаст ребро с использованием двух последних вершин в списке (если их хотя бы две!) И поместит ребро в список ребер.

Если у вас позже есть ребра, которые образованы конкретными вершинами (т.е. не двумя последними), вы можете использовать индекс каждой вершины в списке, чтобы ссылаться на них и определять ребро через эти индексы (то есть ребро от вершины 0 до5 можно определить как 0,5).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...