Advertisement
MouseyN1

de toate pentru teza

Dec 10th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.96 KB | None | 0 0
  1. //afisati toate drumurile dintre x si y
  2. // afisati toate drumurile de lungime n;
  3.  
  4. #include <iostream>
  5. #include <cstring>
  6. #include <fstream>
  7. #include <stdlib.h>
  8.  
  9.  
  10. using namespace std;
  11.  
  12. ifstream fin("date.in");
  13. ofstream fout ("date.out");
  14. int x,y;
  15. int st[100], a[100][100];
  16. int n;
  17. void afisare (int k)
  18. {
  19.     cout<<endl;
  20.     for (int i=1;i<=k;i++)
  21.         {
  22.             cout<<st[i];
  23.  
  24.         }
  25. }
  26.  
  27. void citire ()
  28. {
  29.     char sir[100];
  30.     char *p;
  31.     int nr;
  32.     for (int i=1;i<=n;i++)
  33.     {
  34.         fin.getline(sir,100);
  35.         p=strtok(sir," ");
  36.         while (p)
  37.         {
  38.             nr=atoi(p);
  39.             a[nr][i]=a[i][nr]=1;
  40.             p=strtok(NULL," ");
  41.         }
  42.     }
  43. }
  44.  
  45. int valid (int k)
  46. {
  47.     for (int i=1;i<k;i++)
  48.         if (st[k]==st[i])
  49.             return 0;
  50.         if (k>1 && a[st[k]][st[k-1]]==0)
  51.             return 0;
  52.     return 1;
  53. }
  54.  
  55. void back (int k)
  56. {
  57.     for (int i=1;i<=n;i++)
  58.    {
  59.        st[k]=i;
  60.         if (valid (k))
  61.             if (st[k]==y) // schimb aici daca k==n atunci afiseaza toate nodurile de lungime n si afiseaza drumu
  62.                 afisare (k);
  63.                 else
  64.                     back (k+1);
  65.    }
  66. }
  67.  
  68. int main ()
  69. {
  70.    
  71.     fin>>n;
  72.     citire();
  73.     fin>>x>>y;
  74.     st[1]=x; // ca sa afisam drumurile de lungime x nu mai trbe asta
  75.     back(2); // back de la 1 daca vrem sa vedem toate drumurile de drum n
  76.     return 0;
  77. }
  78.  
  79.  
  80. ______________________________________________________________________________________________________________________
  81.  
  82. // n noduri m muchii
  83. // gradul unui nod, toate drumurile dintre doua noduri x si y citite de la tastatura
  84. // toate nodurile izolate, toate nodurile de grad maxim
  85. //gradul unui grad == suma celor de 1 de pe linia gradului
  86. // daca este drum intre nodurile memorate in p(100)
  87. #include <iostream>
  88. #include <fstream>
  89. using namespace std;
  90. int a[100][100], n , m , st[100],d[100],x,y,drum[100],p[100];
  91. int nod1, nod2;
  92. ifstream fin ("date.in");
  93.  
  94. void citire ()
  95. {
  96.     fin>>n>>m;
  97.     for (int i=1;i<=m;i++ )
  98.     {
  99.         fin>>x>>y;  // x si y este legatura...
  100.         a[x][y]=a[y][x]=1;
  101.     }
  102. }
  103.  
  104. void grade ()
  105. {
  106.     for (int i=1;i<=n;i++)  // parcurg prima linie
  107.         for (int j=1;j<=n;j++)
  108.             d[i]=d[i] + a[i][j]; // calculez numaru de legaturi si le bag intrun vector
  109. }
  110.  
  111. void afisare (int k)
  112. {
  113.  
  114.     cout<<endl;
  115.     cout<<"un drum este : ";
  116.     for (int i=1;i<=k;i++)
  117.         cout<<st[i]<<" ";// in st[i] se imprima drumul
  118. }
  119.  
  120. int valid (int k)
  121. {
  122.     for (int i=1;i<k;i++)
  123.         if (st[i]==st[k])
  124.             return 0;
  125.     if (k>1 && a[ st[k] ][ st[k-1] ]==0 ) // daca nu este legatura intre nodul k si k-1 returnez 0;
  126.         return 0;
  127.     return 1;
  128. }
  129.  
  130.  
  131. void back (int k)
  132. {
  133.     for (int i=1;i<=n;i++)
  134.     {
  135.         st[k]=i;
  136.         if (valid (k)) // verific daca este legatura si daca este cel mai scurt drum.
  137.             if (st[k]==nod2) // inseamna ca a ajuns
  138.                 afisare (k);
  139.             else back (k+1);
  140.     }
  141.  
  142. }
  143.  
  144. void drumuri ()
  145. {
  146.  
  147.     fin>>nod1>>nod2; // se citeste punctul initial si destinatia
  148.     st[1]=nod1; // se baga primul nod in stiva
  149.     back (2);
  150.  
  151. }
  152.  
  153. int main()
  154. {
  155.     int mini=-9;
  156.     citire (); // citesc nr de muchii si nr de noduri.
  157.     grade() ; // calculez cate muchii is legate de fiecare nod
  158.     int i;
  159.     for ( i=1;i<=n;i++)  // caut valoarea maxima de legaturi la 1 nod
  160.     {
  161.         if (d[i]>mini)
  162.             mini=d[i];
  163.     }
  164.     for (i=1;i<=n;i++)  // caut toate valorile egale cu valoarea maxima
  165.     {
  166.         if (d[i]==mini)
  167.             cout<<i<<" , "; // afisez i care este nodul implicit
  168.     }
  169.     cout<<endl;
  170.     cout<<"izolatu este";
  171.     for (i=1;i<=n;i++)  // caut pe ce linie este tot = 0... ca sa vad care este izolat
  172.     {
  173.  
  174.         if (d[i]==0)
  175.         cout<<i;
  176.     }
  177.     cout<<endl;
  178.     drumuri ();
  179.     int pp; // pp este numarul de noduri care o sa verific
  180.     cin>>pp;
  181.     for (int i=1; i<=pp ; i++)
  182.     {
  183.         cin>>p[i]; // citesc drumul
  184.     }
  185.     int ok=0;
  186.     for (int i=1 ; i<pp ;i++) // pp este numarul de noduri, sa vad daca este drum intre ele
  187.     {
  188.         if (a[ p[i] ][ p[i+1] ] == 1) // verific daca este legatura intre 2 alaturate
  189.             continue; // daca este continui
  190.         else
  191.             {
  192.                 cout<<"nu este drum"; // daca nu este afisez ca nu este
  193.                 ok++; // incrementez ok
  194.                 break;
  195.  
  196.             }
  197.     }
  198.     if (ok==0) // daca ok nu este marit inseamna ca este drum
  199.     cout<<"este drum";
  200.  
  201.  
  202. _______________________________________________________________________________________________________________________
  203.  
  204. backtracking recursiv
  205.  
  206. // toate modurile de a da o serie de examene ca sa obtina creditele de care are nevoie
  207.  
  208. #include <iostream>
  209. using namespace std;
  210.  
  211. int st[100],n,s,S,a[100];
  212.  
  213. void afisare (int k)
  214. {
  215.     cout<<"o solutie este";
  216.     for (int i=1;i<=k;i++)
  217.     {
  218.         cout<<a[st[i]]<<"+";
  219.     }
  220. }
  221. void citire ()
  222. {
  223.     for (int i=1;i<=n;i++)
  224.     {
  225.         cin>>a[i];
  226.     }
  227. }
  228.  
  229. int valid (int k)
  230. {
  231.     S=0;
  232.     for (int i=1;i<k;i++)
  233.        {
  234.            if (st[i]==st[k])
  235.             return 0;
  236.         S=S+a[st[i]];
  237.        }
  238.        S=S+a[st[k]];
  239.     return 1;
  240. }
  241.  
  242. void back (int k)
  243. {
  244.     for (int i=1;i<=n;i++)
  245.     {
  246.         st[k]=i;
  247.         if (valid(k))
  248.             if(S>=s)
  249.                 afisare (k);
  250.         else back (k+1);
  251.     }
  252. }
  253.  
  254. int main ()
  255. {
  256.     cout<<"cate examene"; cin>>n;
  257.     cout<<"cate credite"; cin>>s;
  258.     citire ();
  259.     back (1);
  260.     return 0;
  261. }
  262.  
  263. _______________________________________________________________________________________________________________________
  264.  
  265. /*
  266.     se citeste un nr n. generam toate posibilitatie de-al exprima pe n ca .
  267.     toate numerele de la 1 la n : ex:   5= -1+2+3-4+5
  268. */
  269. #include <iostream>
  270.  
  271. using namespace std;
  272.  
  273. int st[100], n;
  274.  
  275. void afisare (int k)
  276. {
  277.     cout<<"\n o solutie este :";
  278.     for (int i=1;i<=n;i++)
  279.     {
  280.         if (st[i]==-1)
  281.         cout<<"-"<<i;
  282.         else
  283.         cout<<"+"<<i;
  284.     }
  285.  
  286. }
  287.  
  288. int valid (int k)
  289. {
  290.     int s=0;
  291.     if (k==n)
  292.     {
  293.         for (int i=1;i<=k;i++)
  294.             s=s+i*st[i];
  295.         if (s!=n)
  296.             return 0;
  297.     }
  298.     return 1;
  299. }
  300.  
  301. void back (int k)
  302. {
  303.     for (int i=-1;i<=1;i+=2)
  304.     {
  305.         st[k]=i;
  306.         if (valid (k))
  307.             if (k==n)
  308.                 afisare (k);
  309.             else
  310.             back (k+1);
  311.     }
  312. }
  313.  
  314. int main()
  315. {
  316.     cout<<"baga n";
  317.     cin>>n;
  318.     back(1);
  319.     return 0;
  320. }
  321.  
  322. _________________________________________________________________________________________________
  323.  
  324. ROYFLOYD            matricea costurilor.
  325.  
  326. {
  327.     int k,i,j;
  328.     for (k=1;k<=n;k++)
  329.         for (i=1;i<=n;i++)
  330.             for (j=1;j<=n;j++)
  331.                 if (a[i][j]==0||a[i][j]>a[i][k]+a[k][j])
  332.                     a[i][j]=a[i][k]+a[k][j];
  333. }
  334.  
  335. DFS
  336.  
  337. void DFS(int nod_curent)
  338. {
  339.     cout<<nod_curent<<"\t";
  340.     for (i=1;i<=n;i++)
  341.     if(a[nod_curent][i] && !viz[i])
  342.         DFS[i];
  343. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement