Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- using namespace std;
- float c[100][100];
- int n,m, d[100],vp, infinit=10000,p[100], s[100],a,b;
- void citire()
- { int x,y,j,i; float cost;
- ifstream f("date2.in");
- f>>a>>b;
- f>>n>>m;
- vp=a;
- for(i=1; i<=n; i++)
- {f>>x>>y>>cost;
- c[x][y]=cost;}
- for(i=1; i<=n; i++)
- for(j=1; j<=n; j++)
- if(i!=j && c[i][j]==0)c[i][j]=infinit;}
- void drum_initial()
- {int i,j;
- for(i=1; i<=n; i++)
- {if(i!=vp && c[vp][i]!=infinit) p[i]=vp;
- d[i]=c[vp][i];}}
- void drum(int i)
- {
- if (p[i]==0)cout<<vp<<" ";
- else {drum(p[i]);
- cout<<i<<" ";}}
- void afisare()
- {
- if(d[b]!=infinit){cout<<"distanta minima pt vf "<<b<<" este "<<d[b]<<endl;
- cout<<"drumul este "; drum(b); cout<<endl;}
- else cout<<"nu exista drum de la"<<vp<<" la "<<b<<endl;
- }
- void dijkstra()
- { int i,j,k;
- s[vp]=1;
- for(i=1; i<=n-1; i++)
- { int minim=infinit;
- for(j=1; j<=n; j++)
- if(s[j]==0 && d[j]<minim){minim=d[j];
- k=j;}
- s[k]=1;
- for(j=1; j<=n; j++)
- if(s[j]==0 && d[j]>d[k]+c[k][j]){ d[j]=d[k]+c[k][j];
- p[j]=k;}}}
- int main()
- { citire(); drum_initial(); dijkstra(); afisare();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement