Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <utility>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. //hakimi-havel
  9. //sortare si permutatie in acelasi timp
  10.  
  11. vector<int> d={1,1,2,3,0,5,1,1,4};
  12. int n=9;
  13. typedef vector<list<int> > graf;
  14.  
  15. int main()
  16. {
  17.     graf g(n);
  18.     vector<int> perm(n);
  19.     for(int i=0; i<n; i++) perm[i]=i;
  20.     for(int i=0; i<n; i++)
  21.     {
  22.         int dmax=-1; //calculam gradul maxim
  23.         for(int j=i; j<n; j++) if(d[j]>dmax) dmax=d[j];
  24.  
  25.         vector<list<int> > grad(dmax+1); //grad[k] = lista de varfuri cu gradul k
  26.         for(int j=i; j<n; j++)
  27.             grad[d[j]].push_back(perm[j]);
  28.  
  29.         int c=i;
  30.         for(int k=dmax; k>=0; k--)
  31.         {
  32.             for(list<int>::iterator it=grad[k].begin(); it!=grad[k].end(); it++)
  33.             {
  34.                 d[c]=k;
  35.                 perm[c]=*it;
  36.                 c++;
  37.             }
  38.         }
  39.         cout<<i<<endl;
  40.             cout<<"perm\n";
  41.             for(int k=0; k<n; k++) cout<<perm[k]<<' ';
  42.             cout<<"\nd\n";
  43.             for(int k=0; k<n; k++) cout<<d[k]<<' ';
  44.             cout<<endl;
  45.         //varful in pozitia i = varful de grad maxim
  46.         if(d[i]>0&&(i+d[i]>=n || d[i+d[i]]==0))
  47.         {
  48.  
  49.             cout<<"\nnu este o secventa grafica\n";
  50.             break;
  51.         }
  52.         else
  53.             for(int j=i+1; j<=i+d[i]; j++)
  54.             {
  55.                 g[perm[i]].push_back(perm[j]);
  56.                 g[perm[j]].push_back(perm[i]);
  57.                 d[j]--;
  58.             }
  59.     }
  60.  
  61.     for(int i=0; i<n; i++) //afisare
  62.         {
  63.             cout<<i+1<<": ";
  64.             for(list<int>::iterator it=g[i].begin(); it!=g[i].end(); it++)
  65.             {
  66.                 cout<<*it<<' ';
  67.             }
  68.             cout<<endl;
  69.         }
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement