Advertisement
Guest User

badii muie muie muie

a guest
Feb 20th, 2020
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #define INF 1000000
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("dijkstra.in");
  7. ofstream fout("dijkstra.out");
  8.  
  9. int nr_noduri, nod_start, Graf[105][105];
  10. int D[105], P[105];
  11. bool viz[105];
  12.  
  13. void citire()
  14. {
  15. int nod1, nod2, cost;
  16. fin>>nr_noduri>>nod_start;
  17. for(int i=1; i<=nr_noduri; i++)
  18. for(int j=1; j<i; j++)
  19. Graf[i][j]=Graf[j][i]=INF;
  20. while(fin>>nod1>>nod2>>cost)
  21. Graf[nod1][nod2]=cost;
  22. }
  23.  
  24. void Init()
  25. {
  26. for(int j=1; j<=nr_noduri; j++)
  27. {
  28. D[j]=Graf[nod_start][j];
  29. P[j]=nod_start;
  30. }
  31. P[nod_start]=0;
  32. viz[nod_start]=1;
  33. }
  34.  
  35. void Dijkstra()
  36. {
  37. int minn, poz_min;
  38. for(int k=1; k<=nr_noduri; k++)
  39. {
  40. minn=INF;
  41. for(int i=1; i<=nr_noduri; i++)
  42. if(minn>D[i] && viz[i]==0)
  43. minn=D[i], poz_min=i;
  44. viz[poz_min]=1;
  45. for(int i=1; i<=nr_noduri; i++)
  46. if(!viz[i] && D[i]>D[poz_min]+Graf[poz_min][i])
  47. {
  48. D[i]=D[poz_min]+Graf[poz_min][i];
  49. P[i]=poz_min;
  50. }
  51. }
  52. }
  53.  
  54. void afisare(int x)
  55. {
  56. if(x != nod_start)
  57. afisare(P[x]);
  58. fout<<x<<" ";
  59. }
  60.  
  61. int main()
  62. {
  63. citire();
  64. Init();
  65. Dijkstra();
  66. /*for(int i=1; i<=nr_noduri; i++)
  67. {
  68. fout<<D[i]<<endl;
  69. afisare(i);
  70. fout<<endl;
  71. }*/
  72. for(int i=1; i<=nr_noduri; i++)
  73. {
  74. if(D[i]==INF)
  75. fout<<-1<<" ";
  76. else
  77. fout<<D[i]<<" ";
  78. }
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement