{
if (gr.EdgeExists(vertex_number, (int)gr.vertexData[i]))
{
current_elem = i;
break;
}
}
}
}
public override void end()
{
if (gr.type == Graph_Type.TYPE_LIST)
{
LGraph lg = (LGraph)gr;
List<GEdge> lst = (List<GEdge>)lg.links[vertex_idx];
current_elem = lst.Count - 1;
}
else if (gr.type == Graph_Type.TYPE_MATRIX)
{
for (int i = gr.V - 1; i > 0; i--)
{
if (gr.EdgeExists(vertex_number, (int)gr.vertexData[i]))
{
current_elem = i;
break;
}
}
}
}
}
ОБЩАЯ ХАРАКТЕРИСТИКА:
Это объект, позволяющий клиентской программе получить доступ к значениям данных, скрытых в коллекции «Простой статический граф», играя роль обобщенного указателя на данные, хранящиеся в коллекции. Даёт возможность перемещаться по входящим рёбрам заданной вершины, осуществлять переход к следующим и получать дескриптор текущего ребра.
ДАННЫЕ
Параметры
vertex_number – номер вершины, в которую входят ребра
ОПЕРАЦИИ:
Конструктор
Вход: ссылка на объект типа «Простой граф» и номер вершины v
Предусловия: нет
Процесс: создание объекта итератора входящих рёбер, m_inVertex = v
Выход: нет
Постусловия: создан объект итератор входящих рёбер вершины
Установка итератора на первое ребро
Вход: нет
Предусловия: вершина vertex_number существует и множество её входящих ребер не пусто
Процесс: установка итератора на первое входящее ребро вершины
Выход: нет
Постусловия: итератор установлен на первое входящее ребро вершины
Установка итератора на следующее ребро
Вход: нет
Предусловия: вершина vertex_number существует и множество её входящих ребер не пусто и итератор не вышел за пределы множества входящих ребер вершины
Процесс: установка итератора на следующее входящее ребро вершины
Выход: нет
Постусловия: итератор установлен на следующее входящее ребро вершины
Проверка на выход за границы коллекции
Вход: нет
Предусловия: нет
Процесс: проверка вышел ли итератор за пределы коллекции
Выход: true-если итератор вышел за пределы, иначе false
Постусловия: нет
Получение дескриптора текущего ребра
Вход: нет
Предусловия: вершина vertex_number существует и множество её входящих ребер не пусто и итератор не вышел за пределы множества входящих ребер вершины
Процесс: получение дескриптора ребра
Выход: дескриптор входящего ребра вершины vertex_number, на которое указывает итератор; генерация исключения в случае несоблюдения предусловия
Постусловия: нет
class Inbox_Edge_Iterator : Iterator
{
int vertex_number;
int vertex_idx;
public Inbox_Edge_Iterator(Graph g, int num)
: base(g)
{
vertex_number = num;
vertex_idx = (int)g.getVertex(num);
//MGraph mgraph = (MGraph)g;
for (int i = 0; i < g.V; i++)
{
if (g.EdgeExists((int)g.vertexData[i], vertex_number))
{
current_elem = i;
break;
}
}
}
public override object Current
{
get
{
GEdge edge = null;
if (current_elem >= gr.vertexData.Count)
return null;
switch (gr.type)
{
case Graph_Type.TYPE_LIST:
{
List<GEdge> lst = (List<GEdge>)((LGraph)gr).links[current_elem];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.