Постусловия: нет
class Vertex_Iterator : Iterator
{
protected int start_idx;
System.Collections.ArrayList visited = new System.Collections.ArrayList();
public override object Current
{
get
{
return current_elem;
}
set
{
current_elem = (int)value;
}
}
public override void next()
{
double dist = -1;
int best = -1;
for (int i = 0; i < gr.V; i++)
{
if (gr.EdgeExists((int)gr.vertexData[current_elem], (int)gr.vertexData[i]) && !visited.Contains(i) )
{
PointF pBegin = (PointF)gr.vertexCoords[current_elem];
PointF pEnd = (PointF)gr.vertexCoords[i];
double newdist = Math.Sqrt(Math.Pow(pEnd.X - pBegin.X, 2.0) + Math.Pow(pEnd.Y - pBegin.Y, 2.0));
if (dist > newdist)
{
dist = newdist;
best = i;
}
current_elem = i;
visited.Add(current_elem);
// break;
}
}
}
public Vertex_Iterator(Graph g, int start_num): base(g)
{
//gr = g;
//Current = 0;
start_idx = current_elem = (int)g.getVertex(start_num);
visited.Add(current_elem);
}
public override void begin()
{
Current = start_idx;
visited.Clear();
visited.Add(start_idx);
}
public override void end()
{
Current = gr.vertexData.Count - 1;
}
}
ОБЩАЯ ХАРАКТЕРИСТИКА:
Это объект, позволяющий клиентской программе получить доступ к значениям данных, скрытых в коллекции «Простой статический граф», играя роль обобщенного указателя на данные, хранящиеся в коллекции. Даёт возможность перемещаться по рёбрам графа, осуществлять переход к первому и следующим рёбрам, получать дескриптор текущего ребра.
ОПЕРАЦИИ:
Конструктор
Вход: ссылка на объект типа «Простой граф»
Предусловия: нет
Процесс: создание объекта итератора рёбер
Выход: нет
Постусловия: создан объект итератор рёбер графа
Установка итератора на первое ребро
Вход: нет
Предусловия: множество ребер не пусто
Процесс: установка итератор на первое ребро графа
Выход: нет
Постусловия: итератор установлен на первое ребро графа
Установка итератора на следующее ребро
Вход: нет
Предусловия: множество ребер не пусто и итератор не вышел за пределы графа
Процесс: установка итератор на следующее ребро графа
Выход: нет
Постусловия: итератор установлен на следующее ребро графа
Проверка на выход за границы коллекции
Вход: нет
Предусловия: нет
Процесс: проверка вышел ли итератор за пределы коллекции
Выход: true-если итератор вышел за пределы, иначе false
Постусловия: нет
Получение дескриптора текущего ребра
Вход: нет
Предусловия: множество ребер не пусто и итератор не вышел за пределы графа
Процесс: получение дескриптора ребра
Выход: дескриптор ребра, на которое указывает итератор; генерация исключения при несоблюдении предусловия
Постусловия: нет
class Edge_Iterator : Iterator
{
int num_beg;
int num_end;
GEdge start;
System.Collections.ArrayList visited = new System.Collections.ArrayList();
public Edge_Iterator(Graph g, int _num_beg, int _num_end) : base(g)
{
num_beg = _num_beg;
num_end = _num_end;
int idx1 = (int)gr.getVertex(num_beg);
int idx2 = (int)gr.getVertex(num_end);
if(g.type == Graph_Type.TYPE_LIST)
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.