Advertisement
Guest User

sadad

a guest
Feb 17th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. float c[100][100];
  5. int n,m, d[100],vp, infinit=10000,p[100], s[100],a,b;
  6.  
  7. void citire()
  8. { int x,y,j,i; float cost;
  9. ifstream f("date2.in");
  10. f>>a>>b;
  11. f>>n>>m;
  12. vp=a;
  13. for(i=1; i<=n; i++)
  14. {f>>x>>y>>cost;
  15. c[x][y]=cost;}
  16.  
  17. for(i=1; i<=n; i++)
  18. for(j=1; j<=n; j++)
  19. if(i!=j && c[i][j]==0)c[i][j]=infinit;}
  20.  
  21. void drum_initial()
  22. {int i,j;
  23. for(i=1; i<=n; i++)
  24. {if(i!=vp && c[vp][i]!=infinit) p[i]=vp;
  25. d[i]=c[vp][i];}}
  26.  
  27. void drum(int i)
  28. {
  29. if (p[i]==0)cout<<vp<<" ";
  30. else {drum(p[i]);
  31. cout<<i<<" ";}}
  32.  
  33. void afisare()
  34. {
  35. if(d[b]!=infinit){cout<<"distanta minima pt vf "<<b<<" este "<<d[b]<<endl;
  36. cout<<"drumul este "; drum(b); cout<<endl;}
  37. else cout<<"nu exista drum de la"<<vp<<" la "<<b<<endl;
  38. }
  39.  
  40. void dijkstra()
  41. { int i,j,k;
  42. s[vp]=1;
  43. for(i=1; i<=n-1; i++)
  44. { int minim=infinit;
  45. for(j=1; j<=n; j++)
  46. if(s[j]==0 && d[j]<minim){minim=d[j];
  47. k=j;}
  48. s[k]=1;
  49. for(j=1; j<=n; j++)
  50. if(s[j]==0 && d[j]>d[k]+c[k][j]){ d[j]=d[k]+c[k][j];
  51. p[j]=k;}}}
  52.  
  53. int main()
  54. { citire(); drum_initial(); dijkstra(); afisare();
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement