Pagini recente » Cod sursa (job #832890) | Cod sursa (job #2525864) | Cod sursa (job #2793463) | Cod sursa (job #2236189) | Cod sursa (job #1113525)
#include <iostream>
#include <fstream>
#include <vector>
#define inf 999999
using namespace std;
int n, m;
vector<vector<int> > c;
vector<int> l;
vector<int> tata;
vector<bool> viz;
void citire(){
ifstream f("dijkstra.in");
f>>n>>m;
viz=vector<bool>(n+1, false);
l=vector<int>(n+1, inf);
tata=vector<int>(n+1, -1);
c=vector<vector<int> >(n+1, vector<int>(n+1, inf));
for(int i=1;i<=n;i++)
c[i][i]=-1;
int x,y,z;
for(int i=0;i<m;i++){
f>>x>>y>>z;
c[x][y]=z;
}
f.close();
return;
for(int i=1;i<=n;i++)
cout<<"\t"<<i;
cout<<"\n";
for(int i=1;i<=n;i++){
cout<<i<<":\t";
for(int j=1;j<=n;j++)
cout<<c[i][j]<<"\t";
cout<<"\n";
}
}
void dijkstra(int x0){
int minim, k, ok;
for(int i=0;i<=n;i++)
l[i]=c[x0][i], tata[i]=x0, viz[i]=false;
tata[x0]=0;
viz[x0]=true;
ok=1;
while(ok){
minim=inf;
for(int i=1;i<=n;i++)
if(!viz[i] && minim>l[i])
minim=l[i], k=i;
if(minim != inf){
viz[k]=true;
for(int i=1; i<=n; i++)
if(!viz[i] && l[i]>l[k]+c[k][i]){
l[i]=l[k]+c[k][i];
tata[i]=k;
}
}
else ok=0;
}
}
int main()
{
citire();
dijkstra(1);
ofstream g("dijkstra.out");
for(int i=2;i<=n;i++)
g<<(l[i]!=inf?l[i]:0)<<" ";
g.close();
return 0;
}