Advertisement
AlexAvram

Untitled

Apr 28th, 2025
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <queue>
  5.  
  6. using namespace std;
  7. string fisier="bellmanford";
  8. ifstream fin(fisier+".in");
  9. ofstream fout(fisier+".out");
  10.  
  11. int n, m, nod_start;
  12. const int NMAX=50005, INF=1E9;
  13. vector <pair<int, int>>graf[NMAX];
  14. queue <int> coada;
  15. int frecv[NMAX]; bool viz[NMAX];
  16. int dist[NMAX];
  17.  
  18. void citire()
  19. {
  20. fin>>n>>m;
  21. int x, y, cost;
  22. for (int i=1; i<=m; ++i)
  23. {
  24. fin>>x>>y>>cost;
  25. graf[x].push_back(make_pair(y, cost));
  26. }
  27.  
  28. fin.close();
  29. }
  30. /*
  31. void citire_2()
  32. {
  33. fin>>n>>nod_start;
  34. int x, y, cost;
  35. while(fin>>x>>y>>cost)
  36. graf[x].push_back(make_pair(y, cost));
  37. }
  38. */
  39. void initializare()
  40. {
  41. for (int i=1; i<=n; ++i)
  42. {
  43. frecv[i]=viz[i]=0;
  44. dist[i]=INF;
  45. }
  46. }
  47. bool ok=1;
  48. void bellman_ford(int start)
  49. {
  50. initializare();
  51. dist[start]=0, coada.push(start), viz[start]=1;
  52. while (!coada.empty())
  53. {
  54. int nod_curent=coada.front();
  55. ++frecv[nod_curent];
  56. if (frecv[nod_curent]>=n)
  57. {
  58. ok=0;
  59. return;//evitam un ciclu negativ
  60. }
  61. coada.pop();
  62. viz[nod_curent]=0;
  63. for (int i=0; i<graf[nod_curent].size(); ++i)
  64. {
  65. int vecin=graf[nod_curent][i].first;
  66. int cost=graf[nod_curent][i].second;
  67. if (dist[vecin]>dist[nod_curent]+cost)
  68. {
  69. dist[vecin]=dist[nod_curent]+cost;
  70. if (!viz[vecin])
  71. coada.push(vecin);
  72. }
  73. }
  74. }
  75. }
  76. void afisare()
  77. {
  78. if(!ok)
  79. {
  80. fout<<"Ciclu negativ!\n";
  81. return;
  82. }
  83. for (int i=1; i<=n; ++i)
  84. fout<<dist[i]<<' ';
  85. fout<<'\n';
  86.  
  87. fout.close();
  88. }
  89. int main()
  90. {
  91. citire();
  92. nod_start=1;
  93. bellman_ford(nod_start);
  94. afisare();
  95. return 0;
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement