Advertisement
edutedu

comis voiajor

Dec 3rd, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int x[10], a[10][10], n, nrsol, smin=10000, sol[100];
  6.  
  7. void init(int k)
  8. {
  9. x[k]=1;
  10. }
  11. int cont(int k)
  12. {
  13. for(int i=2; i<k; i++)
  14. if(x[k]==x[i])
  15. return 0;
  16. if(a[x[k-1]][x[k]]==0)
  17. return 0;
  18. if(k==n)
  19. if(a[x[n]][x[1]]==0)
  20. return 0;
  21. return 1;
  22. }
  23. int existaSuccesor(int k)
  24. {
  25. return x[k]<n;
  26. }
  27. int solutie(int k)
  28. {
  29. int s=0;
  30. if(k==n)
  31. {
  32. for(int i=1; i<n; i++)
  33. s+=a[x[i]][x[i+1]];
  34. s+d=a[x[n]][1];
  35. if(s<smin)
  36. {
  37. smin=s;
  38. for(int j=1; j<=n; j++)
  39. sol[j]=x[j];
  40. }
  41. return 1;
  42. }
  43. return 0;
  44. }
  45. void tipar()
  46. {
  47. nrsol++;
  48. for(int i=1; i<=n; i++)
  49. cout<<x[i]<<" ";
  50. cout<<endl;
  51. }
  52. void back()
  53. {
  54. int k=2;
  55. init(k);
  56. while(k>1)
  57. {
  58. if(existaSuccesor(k))
  59. {
  60. x[k]=x[k]+1;
  61. if(cont(k))
  62. if(solutie(k))
  63. tipar();
  64. else
  65. {
  66. k++;
  67. init(k);
  68. }
  69. }
  70. else k--;
  71. }
  72. }
  73. int main()
  74. {
  75. ifstream f("bac.in");
  76. f>>n;
  77. for(int i=1; i<n; i++)
  78. for(int j=i+1; j<=n; j++)
  79. {
  80. f>>a[i][j];
  81. a[j][i]=a[i][j];
  82. }
  83. x[1]=1;
  84. back();
  85. cout<<"Numarul de solutii este: "<<nrsol;
  86. cout<<"\nDrumul minim este: ";
  87. for(int i=1; i<=n; i++)
  88. cout<<sol[i]<<" ";
  89. cout<<" si are lungimea : "<<smin;
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement