{
if(off())//если
итератор не установлен выходим из функции
return
false;
cur=cur->next;//переходим
к следующему элементу списка смежности
if(!off()){
rez=cur->num;
return
true;
}
return
false;
}
T1&
operator*()//доступ к данным текущего ребра.
{
if(off()
|| !g->vz || ((vznode*)cur)->data==NULL)//проверяем параметры
throw
1;
return
*((vznode*)cur)->data;//получаем данные
}
};
};
#endif
MatrixGraph.h
#ifndef _matrixGraph
#define _matrixGraph
#include
"ATD.h"
template<class
T1>
class matrixGraph:public
GraphATD<T1>
{
//класс матрица
struct matrix
{
bool**
mas;//массив смежности
int
sz;//размер
int
number;//колличество эллементов
matrix(int
_sz)//конструктор
{
sz=_sz;
mas=new
bool*[sz];
for(int
i=0;i<sz;i++)//создаём массив и заполняем его нулями
mas[i]=new
bool[sz];
for(i=0;i<sz;i++)
for(int
j=0;j<sz;j++)
mas[i][j]=0;
}
~matrix()//деструктор
{
for(int
i=0;i<sz;i++)
delete
[] mas[i];
delete
[] mas;
}
bool
insert(int v1,int v2)//вставка нового элемента
{
if(v1==v2
|| v1<0 ||v2<0 || v1>=sz ||v2>=sz)//проверка параметров
return
false;
if(mas[v1][v2])
return
false;
else{//вставка
ребра
mas[v1][v2]=1,number++;return
true;}
}
bool
del(int v1,int v2)//удаление элемента
{
if(v1==v2
|| v1<0 ||v2<0 || v1>=sz ||v2>=sz)//проверка параметров
return
false;
if(!mas[v1][v2])
return
false;
else{//удаление
элемента
mas[v1][v2]=0,number--;return
true;}
}
bool
exist(int v1,int v2)//проверка существования
{
if(v1==v2
|| v1<0 ||v2<0 || v1>=sz ||v2>=sz)//проверка параметров
return
false;
return
mas[v1][v2];//проверка существования элемента
}
};
//класс взвешаная
матрица
//наследует все
свойства простой матрицы
struct
vzmatrix:public matrix
{
T1***
ves;//массив указателей на веса рёбер
vzmatrix(int
_sz):matrix(_sz)//конструктор
{
ves=new
T1**[sz];//создаём массив указателей на веса и заполняем его нулями
for(int
i=0;i<sz;i++)
ves[i]=new
T1*[sz];
for(i=0;i<sz;i++)
for(int
j=0; j<sz; j++)
ves[i][j]=NULL;
}
~vzmatrix():~matrix()//деструктор
{
for(int
i=0;i<sz;i++)
delete
[] ves[i];
delete
[] ves;
}
void
setVes(int v1,int v2,T1 _data)//задание веса
{
if(v1==v2
|| v1<0 ||v2<0 || v1>=sz ||v2>=sz)//проверка параметров
return;
ves[v1][v2]=new
T1(_data);//задание веса
}
T1*
getVes(int v1,int v2)//получение веса
{
if(v1==v2
|| v1<0 ||v2<0 || v1>=sz ||v2>=sz || ves[v1][v2]==NULL)//проверка
параметров
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.