Advertisement
GUBILIN

Untitled

Feb 17th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. 0][100],d[100];
  2. int n;//nr de intersectii
  3. ifstream f("1.in");
  4. void citire()
  5. {
  6. int i,j;
  7. f>>n>>m;
  8. f>>iplecare>>ifinal;
  9. vp=iplecare;
  10. for(i=1;i<=m;i++)
  11. {f>>x>>y>>z;
  12. c[x][y]=z;
  13. }
  14. for(i=1;i<=n;i++)
  15. for(j=1;j<=n;j++)
  16. if(i!=j&&c[i][j]==0)
  17. c[i][j]=infinit;
  18. }
  19.  
  20. void drum_initial()
  21. {
  22. int i;
  23. for(i=1;i<=n;i++)
  24. {
  25. if(i!=vp&&c[vp][i]!=infinit)
  26. p[i]=vp;
  27. d[i]=c[vp][i];
  28. }
  29. }
  30.  
  31.  
  32.  
  33. void drum(int i)
  34. {if(p[i]==0)
  35. cout<<vp<<" ";
  36. else{drum(p[i]);
  37. cout<<i<<" ";
  38. }
  39. }
  40. void afisare()
  41. { int i;
  42. if(d[ifinal]!=infinit)
  43. {
  44. cout<<"distanta min pt vf "<<ifinal<<" = "<<d[ifinal];
  45. cout<<" drumul este ";
  46. drum(ifinal);
  47. cout<<endl;
  48. }
  49. else cout<<"nu exista drum";
  50. }
  51.  
  52.  
  53.  
  54. void Dijkstra()
  55. { int i,j,k;
  56. s[vp]=1;
  57. for(i=1;i<=n-1;i++)
  58. {
  59. int minim=infinit;
  60. for(j=1;j<=n;j++)
  61. if(s[j]==0&&d[j]<minim)
  62. {
  63. minim=d[j];
  64. k=j;}
  65. s[k]=1;
  66. for(j=1;j<=n;j++)
  67. if(s[j]==0 && d[j]>d[k]+c[k][j])
  68. {
  69. d[j]=d[k]+c[k][j];
  70. p[j]=k; }
  71.  
  72. }
  73. }
  74.  
  75. int main()
  76. {
  77. citire();
  78. drum_initial();
  79. Dijkstra();
  80. afisare();
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement