Структуры данных с произвольными связямиГрафы
Граф представляет собой структуру с произвольным характером связей между элементами. С точки зрения программирования наличие в элементе "A" указателя на элемент "B" соответствует наличию в графе дуги, направленной от "A" к "B". Тогда для неориентированного графа требуется наличие как прямого, так и обратного указателя. Процедуры работы с графом также могут предусматривать его рекурсивный обход. Однако при этом необходимо отмечать уже пройденные вершины для исключения зацикливания алгоритма. В приведенном ниже примере каждая вершина графа имеет счетчик проходов, который проверяется каждый раз при входе в вершину.
//------------------------------------------------------bk55-10.cpp
//------Рекурсивный обход графа
struct graph
{
int cnt; // Счетчик обходов вершин
graph **pl; // Динамический массив
}; // указателей
void ScanGraph(graph *p)
{ int i;
p->cnt++; // Увеличить счетчик
for (i=0; p->pl[i] !=NULL; i++)
{
if (p->pl[i]->cnt !=p->cnt) // Вершина не просмотрена
ScanGraph(p->pl[i]); // Рекурсивный обход
}
}