![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
АТД графа
Мы разрабатываем наши алгоритмы обработки графов, используя для этой цели абстрактный тип данных (АТД), который позволяет сформулировать фундаментальные задачи, используя стандартный механизм, введенный в главе 4. Программа 17.1 представляет собой интерфейс АТД, который будет использоваться для этих целей. Базовые представления и реализации графа для этого АТД рассматриваются в главах 17.3-17.5. Далее в этой книге, всякий раз, когда мы будем рассматривать новые задачи обработки графов, мы будем также проводить исследования алгоритмов их решения и реализации этих алгоритмов в контексте клиентских программ и абстрактных типов данных, которые получают доступ к графам через этот интерфейс. Такая схема позволит решать задачи обработки графов в диапазоне от элементарных функций поддержки до сложных решений трудных проблем. В основу рассматриваемого интерфейса положен применяемый нами стандартный механизм, который скрывает представления и реализации от клиентских программ (см. раздел 4.8). Он также включает определение простой структуры, которая позволяет нашим программам манипулировать ребрами некоторым единообразным способом. Такой интерфейс предоставляет в распоряжение клиентов базовый механизм, который позволяет им строить графы (сначала строится граф, затем к нему добавляются ребра), осуществлять поддержку графов (путем удаления некоторых ребер и добавления новых) и исследовать графы (путем использования итератора для обработки вершин, смежных по отношению к заданной вершине). Часть 5. Алгоритмы на графах
Конструктор GRAPH принимает два аргумента: целое, задающее число вершин, и булевское значение, которое показывает, является ли граф ориентированным или неориентированным (орграф), при этом неориентированный граф подразумевается по умолчанию. Базовые операции, которые мы используем для обработки графов и орграфов, суть функции АТД, обеспечивающие их построение и уничтожение, функции для подсчета числа вершин и ребер, а также для добавления и удаления ребер. Класс итератора adjlterator позволяет клиентам проводить обработку любых вершин, смежных по отношению к заданной вершине. Программы 17.2 и 17.3 служат иллюстрацией его использования. struct Edge { int v, w; Edge(int v = -1, int w = -1): v(v), w(w) { } }; class GRAPH { private: // Код, зависящий от реализации public: GRAPH(int, bool); -GRAPH (); int V() const; int E() const; bool directed() const; int insert(Edge); int remove(Edge); bool edge (int, int); class adjlterator { public: adjlterator (const GRAPH &, int); int beg(); int nxt(); bool end(); }; >;
|