Advertisement
barbos01

tema_graf_cpp_TAP

Apr 7th, 2022
661
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int nr_noduri, nr_muchii, mat_adiacenta[10][10];
  6.  
  7. void citire_ma() {
  8.     ifstream fin("mat_adiacenta.in.txt");
  9.     fin >> nr_noduri;
  10.     fin >> nr_muchii;
  11.  
  12.     for(int i = 1; i <= nr_noduri; i++) {
  13.         for(int j = 1; j <= nr_noduri; j++)
  14.             fin >> mat_adiacenta[i][j];
  15.     }
  16.     fin.close();
  17. }
  18.  
  19. int grad(int linie[10], int nr_nods) {
  20.     int grad_nod = 0;
  21.     for(int i = 1; i <= nr_nods; i++) {
  22.         grad_nod += linie[i];
  23.     }
  24.     return grad_nod;
  25. }
  26.  
  27. void afisare_matrice(int mat[10][10], int n, int m) {
  28.     cout<<"Matricea de adiacenta este:\n";
  29.     for(int i = 1; i <= n; i++) {
  30.         for(int j = 1; j <=m; j++) {
  31.             cout<<mat[i][j]<<" ";
  32.         }
  33.         cout<<"\n";
  34.     }
  35. }
  36.  
  37. int main()
  38. {
  39.     citire_ma();
  40.     afisare_matrice(mat_adiacenta, nr_noduri, nr_noduri);
  41. cout<<"\n----------------------------------------------------";
  42.     cout<<"\n\na) Gradele tuturor varfurilor sunt:";
  43.     for(int i = 1; i <= nr_noduri; i++) {
  44.        cout<<"\ng("<<i<<") = "<<grad(mat_adiacenta[i], nr_noduri);
  45.     }
  46. cout<<"\n----------------------------------------------------";
  47.     cout<<"\n\nb) Varfurile cu grad par sunt:";
  48.     for(int i = 1; i <= nr_noduri; i++) {
  49.         if(grad(mat_adiacenta[i], nr_noduri) % 2 == 0)
  50.             cout<<"\ng("<<i<<") = "<<grad(mat_adiacenta[i], nr_noduri)<<" ==> varful "<<i;
  51.     }
  52. cout<<"\n----------------------------------------------------";
  53.     cout<<"\n\nc) Varfurile izolate sunt:";
  54.     for(int i = 1; i <= nr_noduri; i++) {
  55.         if(grad(mat_adiacenta[i], nr_noduri) == 0)
  56.             cout<<"\ng("<<i<<") = "<<grad(mat_adiacenta[i], nr_noduri)<<" ==> varful "<<i;
  57.     }
  58. cout<<"\n----------------------------------------------------";
  59.     cout<<"\n\nd) Varfurile terminale sunt:";
  60.     for(int i = 1; i <= nr_noduri; i++) {
  61.         if(grad(mat_adiacenta[i], nr_noduri) == 1)
  62.             cout<<"\ng("<<i<<") = "<<grad(mat_adiacenta[i], nr_noduri)<<" ==> varful "<<i;
  63.     }
  64. cout<<"\n----------------------------------------------------";
  65.     int ok = 0;
  66.     cout<<"\n\ne) Verifica daca graful are varfuri izolate:";
  67.     for(int i = 1; i <= nr_noduri && ok == 0; i++) {
  68.         ok = 0;
  69.         if(grad(mat_adiacenta[i], nr_noduri) == 0)
  70.             ok = 1;
  71.     }
  72.     if( ok == 1)
  73.         cout<<"\nGraful are varfuri izolate.";
  74.     else
  75.         cout<<"\nGraful nu are varfuri izolate.";
  76. cout<<"\n----------------------------------------------------";
  77.     ok = 0;
  78.     cout<<"\n\nf) Verifica daca graful are varfuri terminale:";
  79.     for(int i = 1; i <= nr_noduri && ok == 0; i++) {
  80.         ok = 0;
  81.         if(grad(mat_adiacenta[i], nr_noduri) == 1)
  82.             ok = 1;
  83.     }
  84.     if( ok == 1)
  85.         cout<<"\nGraful are varfuri terminale.";
  86.     else
  87.         cout<<"\nGraful nu are varfuri terminale.";
  88. cout<<"\n----------------------------------------------------";
  89.     ok = 0;
  90.     cout<<"\n\ng) Verifica daca graful are varfuri interioare:";
  91.     for(int i = 1; i <= nr_noduri && ok == 0; i++) {
  92.         ok = 0;
  93.         if(grad(mat_adiacenta[i], nr_noduri) != 1 && grad(mat_adiacenta[i], nr_noduri) != 0)
  94.             ok = 1;
  95.     }
  96.     if( ok == 1)
  97.         cout<<"\nGraful are varfuri interioare.";
  98.     else
  99.         cout<<"\nGraful nu are varfuri interioare.";
  100. cout<<"\n----------------------------------------------------";
  101.     ok = 0;
  102.     cout<<"\n\nh) Verifica daca graful are toate varfurile izolate:";
  103.     for(int i = 1; i <= nr_noduri; i++) {
  104.         if(grad(mat_adiacenta[i], nr_noduri) == 0)
  105.             ok++;
  106.     }
  107.     if( ok == nr_noduri)
  108.         cout<<"\nGraful are toate varfurile izolate.";
  109.     else
  110.         cout<<"\nGraful nu are toate varfurile izolate.";
  111. cout<<"\n----------------------------------------------------";
  112.     ok = 0;
  113.     cout<<"\n\ni) Verifica daca graful are toate varfurile interioare:";
  114.     for(int i = 1; i <= nr_noduri; i++) {
  115.         if(grad(mat_adiacenta[i], nr_noduri) != 1 && grad(mat_adiacenta[i], nr_noduri) != 0)
  116.             ok++;
  117.     }
  118.     if( ok == nr_noduri)
  119.         cout<<"\nGraful are toate varfurile interioare.";
  120.     else
  121.         cout<<"\nGraful nu are toate varfurile interioare.";
  122. cout<<"\n----------------------------------------------------";
  123.     int vf;ok=1;
  124.     while(ok) {
  125.         cout<<"\nj) Nodurile sunt: ";for(int i=1;i<=nr_noduri;i++)cout<<i<<" " ;
  126.         cout<<"\nIntroduceti varful pentru care doriti sa-i gasiti gradul: ";cin>>vf;
  127.         if(vf > nr_noduri || vf <= 0) cout<<"\nS-a introdus un varf inexistent!";
  128.         else { ok = 0;  cout<<"g("<<vf<<") = "<<grad(mat_adiacenta[vf], nr_noduri);}
  129.     }
  130. cout<<"\n----------------------------------------------------";
  131.     ok=1;
  132.     while(ok) {
  133.         cout<<"\nk) Nodurile sunt: ";for(int i=1;i<=nr_noduri;i++)cout<<i<<" " ;
  134.         cout<<"\nIntroduceti varful pentru care doriti sa-i gasiti vecinii: ";cin>>vf;
  135.         if(vf > nr_noduri || vf <= 0) cout<<"\nS-a introdus un varf inexistent!";
  136.         else {
  137.                 ok = 0;
  138.                 cout<<"Vecini varfului "<<vf<<" sunt:";
  139.                 for(int i = 1; i <= nr_noduri; i++)
  140.                     if(mat_adiacenta[vf][i] == 1)
  141.                         cout<<"\nnodul "<<i;
  142.         }
  143.     }
  144. cout<<"\n----------------------------------------------------";
  145.     vf;ok=1;
  146.     while(ok) {
  147.         cout<<"\nl) Nodurile sunt: ";for(int i=1;i<=nr_noduri;i++)cout<<i<<" " ;
  148.         cout<<"\nIntroduceti varful pentru care doriti sa-i gasiti tipul: ";cin>>vf;
  149.         if(vf > nr_noduri || vf <= 0) cout<<"\nS-a introdus un nod inexistent!";
  150.         else {
  151.                 ok = 0;
  152.                 if(grad(mat_adiacenta[vf], nr_noduri) == 0)
  153.                     cout<<"Varful " << vf << " este izolat.";
  154.                 else if(grad(mat_adiacenta[vf], nr_noduri) == 1)
  155.                     cout<<"Varful " << vf << " este terminal.";
  156.                 else cout<<"Varful " << vf << " este interior.";
  157.         }
  158.     }
  159. cout<<"\n----------------------------------------------------";
  160.     ok = 0;
  161.     cout<<"\nm) Varful si nodurile care au gradul cel mai mare: ";
  162.     int grad_max = 0, nod_grad_max;
  163.     for(int i = 1; i <= nr_noduri; i++)
  164.         if(grad_max < grad(mat_adiacenta[i], nr_noduri))
  165.             {grad_max = grad(mat_adiacenta[i], nr_noduri); nod_grad_max = i;}
  166.     cout<<"\nVarful "<<nod_grad_max<<" are gradul: "<<grad_max<<"\n";
  167.     for(int i = 1; i <= nr_noduri; i++)
  168.         if(grad_max == grad(mat_adiacenta[i], nr_noduri) && nod_grad_max != i) {
  169.             cout<<"nodul " << i << " cu gradul: " << grad_max<<"\n";
  170.             ok=1;
  171.         }
  172.     if(!ok)
  173.         cout<<"Avem un singur nod cu grad maxim!";
  174.  
  175.  
  176.     return 0;
  177. }
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement