Advertisement
Five_NT

[C++]Lanturi elementare intre oricare 2 vf.

Nov 28th, 2013
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. //Sa se afiseze toate lanturile elementare intre oricare doua varfuri grafurilor distincte
  2. #include <iostream.h>
  3. #include <fstream.h>
  4.  
  5. ifstream f("citire.in");
  6. int a[100][100], i, j, n, p, q, sol, x[100], k;
  7.  
  8. void citire()
  9. {
  10.     f>>n;
  11.     for(i=1; i<=n; i++)
  12.         for(j=1; j<=n; j++)
  13.             f>>a[i][j];
  14. }
  15. int cont(int k)
  16. {
  17.     for(int i=1; i<k; i++)
  18.         if(x[i]==x[k])
  19.             return 0;
  20.         if(k > 1)
  21.             if(a[x[k]][x[k-1]]==0)
  22.                 return 0;
  23.     return 1;
  24. }
  25.  
  26. void afis(int k)
  27. {
  28.     for(int i=1; i<=k; i++)
  29.         cout<<x[i]<<" ";
  30.     cout<<'\n';
  31.     sol++;
  32. }
  33.  
  34. void back(int j)
  35. {
  36.     int k=2; x[k]=0;
  37.    
  38.     do
  39.     {
  40.         while(x[k]<n)
  41.         {
  42.             x[k]++;
  43.             if(cont(k))
  44.                
  45.                     if(x[k]==j)
  46.                         afis(k);
  47.                 else
  48.                 {
  49.                     k++;
  50.                     x[k]=0;
  51.                 }
  52.         }
  53.         k--;
  54.     }while(k>1);
  55. }
  56.  
  57. int main()
  58. {
  59.     citire();
  60.     for(int i=1; i<=n; i++)
  61.     {
  62.         cout<<"Lanturile care pornesc din "<<i<<'\n';
  63.         int j;for(j=i+1; j<=n; j++){x[1]=i;
  64.        
  65.         back(j);}
  66.     }
  67.     cout<<"Avem "<<sol<<" solutii.";
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement