throw
1;
return
ves[v1][v2];//получение веса
}
};
matrix* mas; //укзатель
на объект представления маатрицы
int number; //колличество
эллементов
int sz; //размер
матрицы
bool or,vz; //свойства
public:
matrixGraph(int
_sz,bool _or,bool _vz)//конструктор
{//инициализация
параметров
or=_or;
vz=_vz;
sz=_sz;
number=0;
if(!vz)//создание
соответственного класс представления
mas=new
matrix(_sz);
else
mas=(matrix*)new
vzmatrix(_sz);
}
~matrixGraph()
{
delete mas;
}
int Dense(){ //опрос
формы представления графа (L- граф / M- граф),
return 2;
};
int V() // -
опрос числа вершин в графе
{return
mas->sz;}
int E()// -
опрос числа ребер в графе,
{return number;}
bool Directed()// опрос
типа графа (ориентированный / неориентированный)
{return or;}
bool Weighed()
{return vz;}
bool Insert(int
v1,int v2) //вставка ребра, соединяющего вершины v1, v2,
{
if(mas->insert(v1,v2)){//вставка
ребра в объект класса представления
number++;
if(!or)//если
граф не ориентированный, то вставляем обратное ребро
mas->insert(v2,v1);
return
true;
}
return
false;
}
bool Delete (int
v1,int v2) //удаление ребра, соединяющего вершины v1, v2,
{
if(mas->del(v1,v2))//удаление
ребра из объекта класса представления
number--;
else return
false;
if(!or)//если
граф не ориентированный, то удаляем обратное ребро
mas->del(v2,v1);
return
true;
}
bool Edge(int v1,
int v2) //опрос наличия ребра, соединяющего вершины v1, v2,
{
return
mas->exist(v1,v2);//проверяем наличие ребра
}
bool SetEdge(int
v1,int v2,T1 data)//задание параметров ребра,
{
if(!vz)//задать
вес можно только во взвешанную структуру
throw
"not weighed";
((vzmatrix*)mas)->setVes(v1,v2,data);//задаём
вес
if(!or)//если
граф неориентированный - задаём вес обратного ребра
((vzmatrix*)mas)->setVes(v2,v1,data);
return
true;
}
T1* GetEdge(int
v1,int v2) //получение параметров ребра,
{
if(!vz ||
!Edge(v1,v2))//получить вес можно только из взвешаннной структуры
throw
"not weighed or not exist data";
return
((vzmatrix*)mas)->getVes(v1,v2);//получаем вес
}
GraphATD<T1>*
ToListGraph()
{
GraphATD<T1>*
rez=(GraphATD<T1>*)new listGraph<T1>(mas->sz,or,vz);//создаем
L-граф
for(int
i=0;i<mas->sz;i++)//копируем все эллементы из текущего объекта в новый
{
for(int
j=0;j<mas->sz;j++)
{
if(Edge(i,j))
{
rez->Insert(i,j);
if(vz
&& ((vzmatrix*)mas)->ves[i][j]!=NULL)
rez->SetEdge(i,j,*((vzmatrix*)mas)->ves[i][j]);
}
}
}
return rez;
}
GraphATD<T1>*
ToMatrixGraph()
{
return
(GraphATD<T1>*)this;
}
class Iterator;
friend class
Iterator;
//итератор
class
Iterator:public IteratorATD<T1>
{
matrixGraph*
g; //указатель на связанный с итератором граф
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.