while(tmp!=NULL)
{
rez->Insert(i,tmp->num);
if(vz
&& ((vznode*)tmp)->data!=NULL)
rez->SetEdge(i,tmp->num,*((vznode*)tmp)->data);
tmp=tmp->next;
}
}
return rez;
};
bool Insert(int
v1,int v2)//вставка нового элемента
{
if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0)//проверяем входные параметры
return
false;
if(array[v1]->insert(v2))//осуществляем
вставку элемента в соответствующий список смежности
{
if(!or)//если
граф неориентированный, вставляем обратное ребро
array[v2]->insert(v1);
number++;
return
true;
}
return
false;
}
bool Delete(int
v1,int v2)//удаление
{
if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0)//проверяем входные параметры
return
false;
if(array[v1]->del(v2))//удаляем
элемент из соответственного списка смежности
{
if(!or)//если
граф не ориентированный - удаляем обратное ребро
array[v2]->del(v1);
number--;
return
true;
}
return
false;
}
bool Edge(int
v1,int v2)//опрос наличия ребра, соединяющего вершины v1, v2,
{
if(v1<0
|| v2<0 || v1>=sz || v2>=sz)//проверяем входные параметры
return
false;
return
array[v1]->Exist(v2);//осуществляем проверку в соответственном списке
смежности
}
bool SetEdge(int
v1,int v2,T1 data)//задание параметров ребра,
{
if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0 || !vz)//проверка входных
параметров
return
false;
array[v1]->SetData(v2,data);//задаем
параметры соответствующего элемента списка смежности
if(!or)//если
граф не ориентированный - задаём параметры обратного ребра
array[v2]->SetData(v1,data);
return
true;
}
T1* GetEdge(int
v1,int v2)//получение данных
{
if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0 || !vz)//проверяем входные
параметры
throw
"params not in interval";
return
array[v1]->getData(v2);//получаем параметры соответственного узла списка
смежности
}
class Iterator;
friend class
Iterator;
class
Iterator:public IteratorATD<T1>//Итератор
{
listGraph<T1>*
g;//указатель на связанный с итератором граф
int vNum; //номер
вершины, для которой создан итератор
node* cur; //
указатель на текущую смежную вершину
public:
Iterator(listGraph<T1>*
_g,int _vNum)//конструктор
{//инициализируем
параметры
g=_g;
vNum=_vNum;
cur=NULL;
}
~Iterator(){};//деструктор
bool beg(int
&rez)//установка на начало
{
if(vNum>=g->sz
|| vNum<0)//проверка параметров
return
false;
cur=g->array[vNum]->ph;//устанавливаем
элемент на голову соответствующего списка смежности
if(!off())
rez=cur->num;
return
!off();
}
bool
off()//опрос окончания просмотра смежных вершин,
{
if(cur==NULL)//если
итератор не установле то cur равен NULL
return
true;
return
false;
}
bool
next(int &rez)//переход к следующей смежной вершине,
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.