Advertisement
edutedu

sir de 2*n persoane

Dec 11th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #include <iostream>
  2. #include<math.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7. int x[100], n, h[100], nrsol=0;
  8. void init (int k)
  9. {
  10. x[k]=0;
  11. }
  12. int existasuccesor(int k)
  13. {
  14. return x[k]<2*n;
  15. }
  16. int valid(int k)
  17. {
  18. for(int i=1; i<k; i++)
  19. if(x[i]==x[k])
  20. return 0;
  21. if(k<=n)
  22. {
  23. if(h[x[k]]<h[x[k-1]] && k>1)
  24. return 0;
  25. }
  26. else
  27. if(h[x[k]]>h[x[k-n]])
  28. return 0;
  29. return 1;
  30. }
  31. int solutie (int k)
  32. {
  33. return k==2*n;
  34. }
  35. void tipar()
  36. {
  37. nrsol++;
  38. int i;
  39. cout<<"Prima linie: ";
  40. for(i=1; i<=n; i++)
  41. cout<<x[i]<<' ';
  42. cout<<"\nA doua linie: ";
  43. for(i=n+1; i<=2*n; i++)
  44. cout<<x[i]<<' ';
  45. cout<<endl<<endl;
  46. }
  47. void back()
  48. {
  49. int k=1;
  50. init(k);
  51. while(k)
  52. {
  53. while(existasuccesor(k))
  54. {
  55. x[k]++;
  56. if(valid(k))
  57. if(solutie(k))
  58. tipar();
  59. else
  60. {
  61. k=k+1;
  62. init(k);
  63. }
  64. }
  65. k=k-1;
  66. }
  67. }
  68. int main()
  69. {
  70. cout<<"Cate elemente sunt? ";
  71. cin>>n;
  72. for(int i=1;i<=2*n;i++)
  73. {
  74. cout<<"h["<<i<<"]=";
  75. cin>>h[i];
  76. }
  77. back();
  78. cout<<"exista "<<nrsol<<" solutii";
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement