Разработка абстрактного типа данных «Простой, статический граф», страница 3

                            Предусловия:

·  v1 не равно v2

·  вершины v1 и v2 существуют

·  ребро v1-v2 не существует

Процесс: вставка ребра соединяющего вершины v1 и v2

Выход: true – ребро добавлено, иначе false

Постусловия: ребро v1-v2 добавлено в граф

                            Удаление ребра

Вход: номер исходящей вершины v_beg, и входящей v_end

                            Предусловия: ребро v_beg-v_end существует

Процесс: удаление ребра соединяющего вершины v_beg и v_end

Выход: true – ребро удалено, иначе false

Постусловия: ребро v_beg-v_end удалено из графа

                            Добавление вершины

Вход: номер вершины num

                            Предусловия: вершина num не существует

Процесс: вставка вершины num

Выход: true – вершина добавлена, иначе false

Постусловия: вершина добавлена в граф

                            Удаление вершины

Вход: номер вершины num

                            Предусловия: вершина num существует

Процесс: удаление вершины num и всех рёбер связанных с ней

Выход: true – вершина удалена, иначе false

Постусловия: вершина и все связанные с ней ребра удалены из графа

                            Признак существования ребра

Вход: номер исходящей вершины v_beg, и входящей v_end

                            Предусловия: вершины v_beg и v_end существуют

Процесс: проверка существования ребра, соединяющего вершины v_beg-v_end

Выход: true – если ребро есть, иначе false

Постусловия: нет

Опрос веса ребра

Вход: номер исходящей вершины v_beg, и входящей v_end

                            Предусловия:

·  вершины v_ beg и v_end существуют

·  v_beg не равно v_end

·  ребро v_beg-v_end существует

Процесс: получение веса ребра v_beg-v_end

Выход: значение веса ребра

Постусловия: генерация исключения при невыполнении предусловия

Задание веса ребра

Вход: номер исходящей вершины v_beg, и входящей v_end, вес типа TypeWeight

                            Предусловия:

·  вершины v_beg и v_end существуют

·  v_beg не равно v_end

·  ребро v_beg-v_end существует

Процесс: задание веса ребра v_beg-v_end

Выход: true – если вес ребра изменен, иначе false

Постусловия: изменился вес ребра v_beg-v_end

Опрос данных ребра

Вход: номер исходящей вершины v_beg, и входящей v_end

                            Предусловия:

·  вершины v_beg и v_end существуют

·  v_beg не равно v_end

·  ребро v_beg-v_end существует

Процесс: получение данных ребра v_beg-v_end

Выход: значение данных ребра

Постусловия: генерация исключения при невыполнении предусловия

Задание данных ребра

Вход: номер исходящей вершины v1, и входящей v2, весПредусловия:

·  вершины v1 и v2 существуют

·  v1 не равно v2

·  ребро v1-v2 существует

Процесс: задание данных ребра v1-v2

Выход: true – если данные ребра изменены, иначе false

Постусловия: данные ребра v1-v2 изменены

КОНЕЦ АТД

5.2 Клиентское определение класса «Простой граф»

//Шаблонный класс, реализующий АТД «Простой граф»

    public abstract class Graph

    {

        private int e;

        private int v;

        private Graph_Orientation orientation;

        public Graph_Type type;

        public System.Collections.ArrayList vertexCoords = new System.Collections.ArrayList();

        public System.Collections.ArrayList vertexData = new System.Collections.ArrayList();

        public Graph(Graph_Orientation o)

        {

            e = v = 0;

            orientation = o;

        }

        public Graph(int _v, int _e, Graph_Orientation o)

        {

            v = _v;

            e = _e;

            orientation =o;

        }

        public int E

        {

            get

            {

                return e;

            }

            set

            {

                e = value;

            }

        }

        public int V

        {

            get

            {

                return v;

            }

            set

            {