Что хорошая структура данных состоит в том, чтобы представить неориентированного графа?

Вы говорите

, я подразумеваю, что это не используется никаким другим приложением. Если приложение использует порт другие, не может использовать его, пока это не становится свободным.

, Но можно всегда соединяться с портом, в то время как другие используют его, если что-то слушает там. Иначе, http порт 80 была бы путаница.

, Если Ваш

   c = new TcpClient(ip, port);

сбои, то ничто не слушает там. Иначе это соединится, даже если некоторая другая машина/приложение будет иметь сокет, открытый для того IP и порта.

6
задан Andrew Keeton 16 September 2009 в 10:05
поделиться

3 ответа

Есть несколько возможностей с разными плюсами и минусами, подходящими для разных операций с графиками. В этом красивом вступлении дается предыстория и примеры использования списков смежности и матриц смежности.

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

4
ответ дан 10 December 2019 в 02:50
поделиться

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

В ocaml:

let add n1 n2 =
  let aux n1 n2 =
    match Hashtbl.find_option tbl n1 with
    | None -> Hashtbl.add tbl n1 [n2]
    | Some nodes -> Hashtbl.replace tbl n1 (n2::nodes)
  in
  let _ = aux n1 n2 in
  aux n2 n1

Это будет ориентированный граф, просто вы должны добавить оба направления на вставке. Функция поиска по хэш-таблице будет действовать как ваша подключенная функция .

(Фактически, в хэш-таблицах Ocaml предлагается несколько значений для ключа, поэтому вы можете просто использовать функцию Hashtbl.find_all и сохраните список. Но это проще всего перевести в SML.)

1
ответ дан 10 December 2019 в 02:50
поделиться

Хорошо, я не знаком с этим языком (прошу прощения за мое незнание):

Я бы просто использовал следующую структуру:

V.E1.E2.En+1
V2.E1.E2.En+1
Vn+1.E1.E2.En+1

так что в основном первая цифра перед десятичной будет представлять вершину,

4
ответ дан 10 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: