#include #include "LList.cpp" using namespace std; typedef LList IntList; typedef LList IntGraph; elem_link1* Point(int a, IntGraph &g); //vrushta ukazatel kum elementa a, koito e v graf void AddTop(int a, IntGraph &g); //dobavq vruh v graf void AddRib(int a, int b, IntGraph &g); //dobavq rebro mejdu dva vurha v graf void RemoveRib(int a, int b, IntGraph &g); //premahva rebro mejdu dva vurha v graf void RemoveTop(int a, IntGraph &g); //premahva sushtestvuvasht vruh ot graf bool IsTop(IntGraph g, int v); //proverqva dali dadeno chislo e vruh v graf bool IsRib(IntGraph g, int v1, int v2); //proverqva dali ima rebro (v1,v2) v grafa g int main() { IntGraph g; return 0; } elem_link1* Point(int a, IntGraph &g) //vrushta ukazatel kum elementa a, koito e v graf { elem_link1 *p; elem_link1 *q; g.IterStart(); do { p = g.Iter(); p->inf.IterStart(); q = p->inf.Iter(); } while (q->inf != a); return q; } void AddTop(int a, IntGraph &g) //dobavq vruh v graf { IntList l; l.ToEnd(a); g.ToEnd(l); } void AddRib(int a, int b, IntGraph &g) //dobavq rebro mejdu dva vurha v graf { elem_link1 *q = Point(a,g); elem_link1 *p; while (q->link) q = q->link; p = new elem_link1; p->inf = b; p->link = NULL; q->link = p; } void RemoveRib(int a, int b, IntGraph &g) //premahva rebro mejdu dva vurha v graf { int x; elem_link1 *p; elem_link1 *q; g.IterStart(); do { p = g.Iter(); p->inf.IterStart(); q = p->inf.Iter(); } while (q->inf != a); while (q->inf != b) q = q->link; p->inf.DeleteElem(q, x); } void RemoveTop(int a, IntGraph &g) //premahva sushtestvuvasht vruh ot graf { IntList Trash; int x; elem_link1 *p; g.IterStart(); p = g.Iter(); do { p->inf.IterStart(); elem_link1 *q = p->inf.Iter(); if (q->inf == a) { g.DeleteElem(p, Trash); break; } p = p->link; } while (p); g.IterStart(); p = g.Iter(); elem_link1 *r; while (p) { p->inf.IterStart(); r = p->inf.Iter(); r = r->link; while (r) { if (r && r->inf == a) { p->inf.DeleteElem(r, x); break; } r = r->link; } p = p->link; } } bool IsTop(IntGraph g, int v) //proverqva dali dadeno chislo e vruh v graf { g.IterStart(); elem_link1 *p = g.Iter(); while (p) { p->inf.IterStart(); elem_link1 *q = p->inf.Iter(); if (q->inf == v) return true; p = p->link; } return false; } bool IsRib(IntGraph g, int v1, int v2) //proverqva dali ima rebro (v1,v2) v grafa g { g.IterStart(); elem_link1 *p = g.Iter(); while (p) { p->inf.IterStart(); elem_link1 *q = p->inf.Iter(); if (q->inf == v1) return p->inf.member(v2); p = p->link; } return false; }