Advertisement
a53

Anarhie_Oficiala

a53
Feb 21st, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. ifstream fin("anarhie.in");
  6. ofstream fout("anarhie.out");
  7.  
  8. int n , m , K , p, q , a[105][105],
  9. x[105], // backtracking
  10. z[105], // vector caracteristic, pentru sindicatele din submultimea curenta
  11. v[105], // vizitati pentru parcurgere
  12. rasp = 1000
  13. ;
  14.  
  15. /*
  16. * Generez toate submultimile de sindicate, si pentru fiecare submultime verific
  17. * daca poate fi parcurs traseul folosind doar sindicatele din acea submultime
  18. * O( 2^k * n^2)
  19. * */
  20.  
  21. void citire()
  22. {
  23. fin >> n >> m >> K;
  24. fin >> p >> q;
  25. int i , j , s;
  26. for(int k = 1 ; k <= m ; ++k)
  27. {
  28. fin >> i >> j >> s;
  29. a[i][j] = s;
  30. }
  31. }
  32.  
  33. int DF(int x)
  34. {
  35. if(x == q)
  36. return 1;
  37. v[x] = 1;
  38. int rez = 0;
  39. for(int i = 1 ; i <= n ; ++i)
  40. if(v[i] == 0 && z[a[x][i]] == 1)
  41. rez |= DF(i);
  42. return rez;
  43. }
  44.  
  45. int verif(int k)
  46. {
  47. for(int i = 1 ; i <= n ; ++i)
  48. v[i] = z[i] = 0;
  49. for(int i = 1 ; i <= k ; ++i)
  50. z[x[i]] = 1;
  51. int pot = DF(p);
  52. return pot;
  53. }
  54.  
  55. void back(int k)
  56. {
  57. for(int i = x[k-1] + 1 ; i <= K ; i ++)
  58. {
  59. x[k] = i;
  60. if(verif(k))
  61. {
  62. if(rasp > k)
  63. rasp = k;
  64. }
  65. back(k+1);
  66. }
  67. }
  68.  
  69. int main()
  70. {
  71. citire();
  72. back(1);
  73. fout << rasp;
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement