Scrieti programul C care permite crearea si vizualizarea sub forma naturala a unui graf implementat prin structuri de adiacente-varianta multilista. (graf neorientat).
Tema2: Scrieti programul C care permite crearea si vizualizarea sub forma naturala a unui graf implementat prin structuri de adiacenta-varianta multilista. (graf orientat).
Descriere algoritm
O alta alternativa de impleme 959j98j ntare a structurilor de adiacente se bazeaza pe structure multiinlantuite. Astfel, o structura de adiacente este de fapt o lista inlantuita a nodurilor grafului. Pentru fiecare nod al acestei liste se pastreaza o lista a arcelor, respective o lista inlantuita a cheilor nodurilor adiacente.
In consecinta, fiecare nod al listei nodurilor va contine doua inlantuiri, una indicand nodul urmator, cealalta, lista nodurilor adiacente.
Observatie Implementarea prin structura multilista cand nodurile grafului sunt denumite prin cate o litera, iar informatia despre nod este tot de tipul character.
Se face precizarea ca valorile aferente nodurilos sunt pastrate integral in lista de noduri. In lista de arce apar numai cheile. Desigur, este posibil sa lipseasca campul “info” si deci TipElem=TipCheie.
Insertia unui nod se va realize simplu, la inceputul listei nodurilor.
Inserarea arcului (x,y) presupune insertia lui x in lista de adiacente a lui y si reciproc. Si in acest caz insertia se realizeaza cel mai simplu la inceputul listei.
Suprimarea arcului precizat de IndiceArc presupune extragerea a doua noduri din doua liste de adiacente diferite. IndiceArc contine doi pointeri v1 si v2m care indica doua noduri in lista de noduri.
In vedera suprimarii arcului care le conecteaza este necesar ca fiecare nod in parte sa fie suprimat din lista de adiacente a celuilalt.
Functia SuprimaArc realizeaza suprimarea arcului precizat de variabila IndiceArc.
Functiile CautaAdi si SuprimaNod sunt si ele realizate in termenii setului de operatori aplicabili obiectelor de tip lista lniara simplu inlantuita.
Rezolvare:
Tema1:Scrieti programul C care permite crearea si vizualizarea sub forma naturala a unui graf implementat prin structuri de adiacente-varianta multilista. (graf neorientat).
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#define NrMax 10
#define pi 2*asin(1)
#define r 15
#define R 150
typedef char TipCheie;
typedef char TipInfo;
typedef struct elem
TipElem;
typedef struct adi
Tadi;
typedef Tadi *pointAdi;
typedef struct nod
Tnod;
typedef Tnod *pointNod;
typedef pointNod Graf;
typedef struct arc
TipArc;
Graf g;
TipArc IndiceArc;
pointNod IndiceNod;
TipElem e;
int n,x0,y0;
void initializare_mod_grafic(void)
}//initializare
int index(Graf g, TipCheie c)
if(b==1)
return i;
else return -1;
}//index
int NrNoduri(Graf g)
return n;
}//nrNoduri
void desenareNoduri(Graf g)
pointNod q;
x0=getmaxx()/2+100;
y0=getmaxy()/2;
n=NrNoduri(g);
if(n>0)
}
else printf('Graful este vid!n');
}//desenareNoduri
void deseneazaGraf(Graf g)
q=q->urmNod;
}//for i
}
}//desenareGraf
pointAdi CautaAdi(pointAdi Ly, TipCheie x)
//CautaAdi
void SuprimaNodAdi(pointAdi Ax, pointAdi *Ly)
else
else
}//SuprimaNodAdi
void SuprimaArc(TipArc IndiceArc)
}//SuprimareArc
void InserNodGraf(TipElem e, Graf *g)
//InserNodGraf
void InserNodAdi(TipCheie x, pointAdi *Ly)
//inserNodAdi
void InserArc(TipArc IndiceArc)
//InserArc
pointNod CautaNod(Graf g, TipCheie x)
//CautaNod
void SuprimaLAdi(pointNod IndiceNod, Graf *g)
}//SyprimaLAdi
void SuprimaNod(pointNod IndiceNod, Graf *g)
else
else
}//SuprimaNod
void creare(Graf *g)
}
else printf('Nod eronat!n');
printf('Doriti sa mai introduceti un nod? (D/N): ');
fflush(stdin); scanf('%c',&rasp); rasp=toupper(rasp);
}//endwhile
initializare_mod_grafic();
desenareNoduri(*g);
printf('Doriti sa introduceti un arc?(D/N): ');
fflush(stdin); scanf('%c',&rasp); rasp=toupper(rasp);
while(rasp=='D')
//whie p
}//for i
}
}
printf('Doriti sa introduceti un nou arc?(D/N): ');
fflush(stdin); scanf('%c',&rasp); rasp=toupper(rasp);
}//while
closegraph();
}//creare
void main(void)
creare(&g);
break;
case 'V': initializare_mod_grafic();
deseneazaGraf(g);
printf('Tastati Enter!n');
getch();
closegraph();
break;
case 'D': if(g!=NULL)
else printf('Graful este vid!n');
break;
case 'S': if(g!=NULL)
else printf('Graful este vid!n');
break;
case 'E': break;
default: printf('Ati introdus optiune gresita!n');
}
printf('Tastati un caracter:n');
getch();
}while(rasp!='E');
}//main
Rezolvare:
Tema2: Scrieti programul C care permite crearea si vizualizarea sub forma naturala a unui graf implementat prin structuri de adiacenta-varianta multilista. (graf orientat).
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<alloc.h>
#define CALE 'C:BorlandCBGI'
#define R 200
#define r 15
#define maxN 10
#define pi M_PI
typedef int TipCheie;
typedef char TipInfo;
typedef struct elem
TipEl;
typedef struct adi
Tadi;
typedef Tadi * PointAdi;
typedef struct nod
Tnod;
typedef Tnod * PointNod;
typedef struct arc
TipArc;
typedef PointNod graf;
graf g;
TipArc IndiceArc;
PointNod IndiceNod;
char c1,c2,e,c;
int x,y,i,j,n;
PointAdi z,v,q;
double x0, y0, xi,yi,xj,yj,x1,y1,x2,y2,x3,y3,Alfa,Alfa1,Alfa2;
void InitModGrafic(void)
int Index(TipCheie x)
if(b==1) return i;
else return -1;
}
int NrNoduri(graf g)
return k;
}
void InserNodG(graf *g)
else printf('Nod eronatn');
void InserNodA(TipCheie x, PointAdi *Ly)
PointNod Cauta (graf g, TipCheie x)
void InserArc(TipArc IndiceArc)
void DesenareNoduri(int n)
PointNod q;
q=g;
for(i=0; i<=n-1; i++)
setcolor(WHITE);
void TraseazaArc(int i,int j)
void DesenareGraf(void)
q=q->UrmNod;
}
void InserareArc(void)
else printf('eroare: vf arcului');
}
else printf('eroare: coada arcului');
}//InserareArc
void Creare(void)
InitModGrafic();
DesenareNoduri(n);
//Introducerea arcelor
printf('Introduceti arc? ');
fflush(stdin);scanf('%c',&c);c=toupper(c);
while(c=='D')
}
printf('Mai introduceti arc? ');
fflush(stdin);scanf('%c',&c);c=toupper(c);
} //while
PointNod CautaNod(graf g, TipCheie x)
//CautaNod
void SuprimaNodAdi(PointAdi Ax, PointAdi *Ly)
else
else
}//SuprimaNodAdi
PointAdi CautaAdi(PointAdi Ly, TipCheie x)
//CautaAdi
void SuprimaArc(TipArc IndiceArc)
}//SuprimareArc
void main (void)
}
else printf('Graful este vid!n');
break;
case 'E':break;
default: printf('Ati introdus optiune eronata! n');
break;
}
printf('Tastati Enter!n');getch();
} while (op != 'E');
getch();
closegraph();
} //main
|