virtual bool
next(int&)=0;//переход к следующей смежной вершине,
virtual T1&
operator*()=0;//доступ к данным текущего ребра.
virtual
~IteratorATD(){};
};
#endif
Graph.h
#ifndef _Graph
#define _Graph
#include
"ATD.h"
#include
"listGraph.h"
#include
"matrixGraph.h"
//Интерфейс класса ГРАФ
template<class
Ed>
class graph
{
int maxE;
GraphATD<Ed>
*g;//указатель на класс предвтавления
public:
graph(int sz,bool
or,bool vz)//конструктор--входные параметры размер, и свойства графа
{
g=(GraphATD<Ed>*)new
listGraph<Ed>(sz,or,vz);
maxE=sz*(sz-1);
if(!or)
maxE/=2;
}
~graph()//деструктор
{
/*switch(g->Dense())
{
case 1:
delete (listGraph<Ed>*)g; break;
case 2:
delete (matrixGraph<Ed>*)g; break;
}*/
delete g;
}
int V()// - опрос
числа вершин в графе,
{return
g->V();};
int E()// -
опрос числа ребер в графе,
{return
g->E();}
bool Directed()// опрос
типа графа (ориентированный / неориентированный)
{return
g->Directed();}
int Dense()// опрос
формы представления графа (L- граф 1 / M- граф 2),
{return
g->Dense();}
bool Insert(int
v1,int v2)// вставка ребра, соединяющего вершины v1, v2,
{return
g->Insert(v1,v2);}
bool Delete(int
v1,int v2)// удаление ребра, соединяющего вершины v1, v2,
{return
g->Delete(v1,v2);}
bool Edge(int
v1,int v2)// опрос наличия ребра, соединяющего вершины v1, v2,
{return
g->Edge(v1,v2);}
bool SetEdge(int
v1,int v2,Ed data) //задание параметров ребра,
{
if(!g->Weighed()
|| !g->Edge(v1,v2)) return false;
return
g->SetEdge(v1,v2,data);
}
Ed* GetEdge(int
v1,int v2) //получение параметров ребра
{
if(!g->Weighed())
return NULL;
Ed* tmp;
try{
tmp =
g->GetEdge(v1,v2);
}
catch (...)
{
return
NULL;
}
return tmp;
}
bool
ToMatrixGraph()
{
if(g->Dense()==1)
{
listGraph<Ed>
*tmp;
tmp=(listGraph<Ed>*)g;
g=g->ToMatrixGraph();
tmp->~listGraph();
return
true;
}
return
false;
}
bool
ToListGraph()
{
if(g->Dense()==2)
{
matrixGraph<Ed>
*tmp;
tmp=(matrixGraph<Ed>*)g;
g=g->ToListGraph();
tmp->~matrixGraph();
return
true;
}
return
false;
}
class Iterator;
friend class
Iterator;
class Iterator //интерфейс
итератора
{
graph*
graf; //указатель на связанный с итератором граф
IteratorATD<Ed>*
iter;//указатель на обьект класса представления
int v;
public:
Iterator(graph*
g,int _v)//конструктор
{
v=_v;
graf=g;
switch(g->Dense())//создаём
соответственный объект класса представления
{
case
1:iter=(IteratorATD<Ed>*)new listGraph<Ed>::Iterator(((listGraph<Ed>*)graf->g),v);
break;
case
2:iter=(IteratorATD<Ed>*)new
matrixGraph<Ed>::Iterator(((matrixGraph<Ed>*)graf->g),v); break;
}
}
~Iterator()//деструктор
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.