Advertisement
Guest User

dijkstra

a guest
Nov 28th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #define inf 9999
  4. using namespace std;
  5. ifstream fin("date.in");
  6. int n,m,x,y,viz[100],pred[100],d[100];/// afis dr xy
  7. double c[100][100];
  8. void af()
  9. {
  10.     for(int i=1;i<=n;i++)
  11.         {for(int j=1;j<=n;j++)
  12.             cout<<c[i][j]<<" ";
  13.         cout<<endl;}
  14. }
  15. void init()
  16. {
  17.     double cost;
  18.     fin>>n>>m;
  19.     for(int i=1;i<n;i++)
  20.         for(int j=i+1;j<=n;j++)
  21.             c[i][j]=inf,c[j][i]=inf;
  22.     for(int i=1;i<=m;i++)
  23.         fin>>x>>y>>cost,c[x][y]=cost;
  24.     fin>>x>>y;
  25.  
  26.     for(int i=1;i<=n;i++)
  27.         d[i]=c[x][i],pred[i]=x;
  28.     viz[x]=1;
  29.     pred[x]=0;
  30.     d[x]=0;
  31. }
  32. void di()
  33. {
  34.     double dmin;
  35.     int vfmin;
  36.     for(int j=1;j<n;j++)
  37.     {
  38.         dmin=inf;
  39.         for(int i=1;i<=n;i++)
  40.             if(d[i]<dmin)
  41.                 dmin=d[i],vfmin=i;
  42.         viz[vfmin]=1;
  43.         for(int i=1;i<=n;i++)
  44.             if(d[i]>d[vfmin]+c[vfmin][i])
  45.                 d[i]=d[vfmin]+c[vfmin][i],pred[i]=vfmin;
  46.  
  47.     }
  48. }
  49. void afis_drum(int u)
  50. {
  51.     if(!u)
  52.         return;
  53.     afis_drum(pred[u]);
  54.     cout<<u<<" ";
  55. }
  56. void afis()
  57. {
  58.     if(d[y]<inf)
  59.     {
  60.         cout<<"drumul de la "<<x<<" la "<<y<<":";
  61.         afis_drum(y);
  62.     }
  63.     else cout<<"Nu exitsa drum";
  64.  
  65. }
  66. int main()
  67. {
  68.     init();
  69.     di();
  70.     afis();
  71.     cout<<endl<<c[x][y];
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement