#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