0% au considerat acest document util (0 voturi)
3 vizualizări12 pagini

Include

Încărcat de

the mighht boss
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
3 vizualizări12 pagini

Include

Încărcat de

the mighht boss
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

#include <iostream>

#include <fstream>

using namespace std;

struct Muchie {

int a, b;

};

int a[100][100];

int b[100][100];

Muchie v[100];

int t[100];

int s[100], d[100];

int n, m;

int tipGraf; // 1 - neorientat, 2 - arbore, 3 - arbore binar, 4 - orientat

int reprezentare; // 1 - matrice adiacenta, 2 - vector muchii, 3 - matrice incidenta

int orientat; // 0 - neorientat, 1 - orientat

void citireTastatura() {

cout << "noduri= ";

cin >> n;

if (tipGraf == 2) {

m = n - 1;

cout << "introdu muchile arborelui \n";

else if (tipGraf == 3) {
m = n - 1;

cout << "radacina= ";

int radacina;

cin >> radacina;

t[radacina] = 0;

for (int i = 1; i <= n; i++) {

if (i != radacina) {

cout << "tatal nod " << i << ": ";

cin >> t[i];

return;

else {

cout << " muchii= ";

cin >> m;

if (reprezentare == 1) {

for (int i = 0; i < m; i++) {

int x, y;

cout << "muchia " << i + 1 << ": ";

cin >> x >> y;

a[x][y] = 1;

if (!orientat) {

a[y][x] = 1;

else if (reprezentare == 2) {

for (int i = 0; i < m; i++) {


cout << "muchia " << i + 1 << ": ";

cin >> v[i].a >> v[i].b;

else if (reprezentare == 3) {

for (int i = 0; i < m; i++) {

int x, y;

cout << "muchia " << i + 1 << ": ";

cin >> x >> y;

b[x][i] = 1;

if (!orientat) {

b[y][i] = 1;

else {

b[y][i] = -1;

void citireFisier() {

ifstream f("[Link]");

f >> n;

if (tipGraf == 2) {

m = n - 1;

else if (tipGraf == 3) {

m = n - 1;
int radacina;

f >> radacina;

t[radacina] = 0;

for (int i = 1; i <= n; i++) {

if (i != radacina) {

f >> t[i];

[Link]();

return;

else {

f >> m;

if (reprezentare == 1) {

for (int i = 0; i < m; i++) {

int x, y;

f >> x >> y;

a[x][y] = 1;

if (!orientat) {

a[y][x] = 1;

else if (reprezentare == 2) {

for (int i = 0; i < m; i++) {

f >> v[i].a >> v[i].b;

else if (reprezentare == 3) {
for (int i = 0; i < m; i++) {

int x, y;

f >> x >> y;

b[x][i] = 1;

if (!orientat) {

b[y][i] = 1;

else {

b[y][i] = -1;

[Link]();

void afisareA() {

cout << "matricea de adiacenta:\n";

for (int i = 1; i <= n; i++) {

for (int j = 1; j <= n; j++) {

cout << a[i][j] << " ";

cout << endl;

void afisareV() {

cout << "vectorul de muchii:\n";

for (int i = 0; i < m; i++) {

cout << v[i].a << " " << v[i].b << endl;

}
}

void afisareB() {

cout << "matricea de incidenta:\n";

for (int i = 1; i <= n; i++) {

for (int j = 0; j < m; j++) {

cout << b[i][j] << " ";

cout << endl;

void gradNodA(int nod) {

int g = 0;

for (int j = 1; j <= n; j++) {

g += a[nod][j];

cout << "gradul " << nod << " = " << g << endl;

void veciniNodA(int nod) {

cout << "vecinii nodului " << nod << ": ";

for (int j = 1; j <= n; j++) {

if (a[nod][j]) {

cout << j << " ";

cout << endl;

void IzolateTerminaleMatAdiacenta() {
for (int i = 1; i <= n; i++) {

int g = 0;

for (int j = 1; j <= n; j++) {

g += a[i][j];

if (g == 0) {

cout << "nod " << i << " este izolat.\n";

if (g == 1) {

cout << "nod " << i << " este terminal.\n";

void GradmaxMatAdiacenta() {

int max = -1;

for (int i = 1; i <= n; i++) {

int g = 0;

for (int j = 1; j <= n; j++) {

g += a[i][j];

if (g > max) {

max = g;

cout << "noduri cu grad maxim "<< max<<"\n";

for (int i = 1; i <= n; i++) {

int g = 0;

for (int j = 1; j <= n; j++) {

g += a[i][j];

}
if (g == max) {

cout << i << " ";

cout << endl;

void fiiNodArbore(int nod) {

cout << "fiii nodului " << nod << ": ";

for (int i = 1; i <= n; i++) {

if (t[i] == nod) {

cout << i << " ";

cout << endl;

void frunzeArboreBinar() {

cout << "noduri frunza in arborele binar: ";

for (int i = 1; i <= n; i++) {

if (s[i] == 0 && d[i] == 0) {

cout << i << " ";

cout << endl;

int main() {

int optCitire;

cout << "1. tastatura\n2. fisier\n";

cin >> optCitire;


cout << "tipul grafului:\n";

cout << "1. neorientat\n2. arbore\n3. arbore binar\n4. orientat\n";

cin >> tipGraf;

orientat = 0;

if (tipGraf == 4) {

orientat = 1;

if (tipGraf == 2) {

reprezentare = 4; // vector tata

if (tipGraf == 3) {

reprezentare = 5; // vectori s/d

if (tipGraf != 2 && tipGraf != 3) {

cout << "Metoda de reprezentare:\n";

cout << "1. Matrice adiacenta\n 2. Vector muchii\n 3. Matrice incidenta\n";

cin >> reprezentare;

if (optCitire == 1) {

citireTastatura();

else {

citireFisier();

}
int opt;

do {

cout << "1. afiseaza reprezentarea grafului\n";

cout << "2. gradul unui nod\n";

cout << "3. vecinii unui nod\n";

cout << "4. noduri izolate/terminale\n";

cout << "5. noduri cu grad 100im\n";

cout << "6. fii unui nod (arbore)\n";

cout << "7. frunze (arbore binar)\n";

cout << "0. iesire\n";

cin >> opt;

if (opt == 1) {

if (reprezentare == 1) afisareA();

else if (reprezentare == 2) afisareV();

else if (reprezentare == 3) afisareB();

if (opt == 2 && reprezentare == 1) {

int nod;

cout << "introdu nodul: ";

cin >> nod;

gradNodA(nod);

if (opt == 3 && reprezentare == 1) {

int nod;

cout << "introdu nodul: ";

cin >> nod;

veciniNodA(nod);
}

if (opt == 4 && reprezentare == 1) {

IzolateTerminaleMatAdiacenta();

if (opt == 5 && reprezentare == 1) {

GradmaxMatAdiacenta();

if (opt == 6 && tipGraf == 2) {

int nod;

cout << "introdu nodul: ";

cin >> nod;

fiiNodArbore(nod);

if (opt == 7 && tipGraf == 3) {

frunzeArboreBinar();

} while (opt != 0);

return 0;

integreaza in acest cod sa ai la inceput alegerea intre acest cod sau rezolvarea unui test cu
intrebarile:1)Indicați numărul maxim de vârfuri izolate pe care le poate avea un graf orientat cu 24 de
vârfuri și 24 de

arce poziționate adecvat.2)Indicați numerele pe care le pot memora variabilele întregi x și y, astfel

încât valoarea expresiei C/C++ alăturate să fie 1.

y%x–(x/y)*3!=0 3)Unui arbore cu 10 noduri i se adaugă o muchie, cu extremitățile în două dintre


nodurile sale. Indicați
numărul ciclurilor elementare pe care le conține graful obținut. 4)Utilizând metoda backtracking se
generează toate numerele formate din cifre distincte, cifre a căror

sumă să fie 6. Primele patru soluții generate sunt, în această ordine: 1023, 1032, 105 și 1203. Indicați

cea de a șasea soluție generată. 5)Un graf neorientat eulerian cu 5 noduri are un nod cu gradul 4.
Indicați numărul minim de muchii ale

grafului. fiecare intrebare corecta are punctaj de 2 puncte si la final iti da punctajul obtinut si care
erau toate variantele corecte

S-ar putea să vă placă și