Pagini recente » Cod sursa (job #812843) | Cod sursa (job #3175928) | Cod sursa (job #2941879) | Cod sursa (job #2949170) | Cod sursa (job #1113601)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#define inf 999999
using namespace std;
struct tdr{
int dest, cost;
tdr(){};
tdr(int a, int b){dest=a, cost=b;};
};
int n, m;
vector< list<tdr> > v;
list<tdr>::iterator it;
vector<int> l;
vector<int> tata;
vector<bool> viz;
void citire(){
ifstream f("dijkstra.in");
f>>n>>m;
//c=vector<vector<int> >(n+1, vector<int>(n+1, inf));
v=vector<list<tdr> >(n+1);
int x,y,z;
for(int i=0;i<m;i++){
f>>x>>y>>z;
v[x].push_back(tdr(y, z));
v[y].push_back(tdr(x, z));
}
f.close();
return;
for(int i=1;i<n;i++){
cout<<i<<": ";
for(it=v[i].begin(); it!=v[i].end();it++)
cout<<it->dest<<" ";
cout<<"\n";
}
}
void dijkstra(int x0){
int minim, k, ok;
viz=vector<bool>(n+1, false);
l=vector<int>(n+1, inf);
tata=vector<int>(n+1, -1);
l[x0]=0;
ok=1;
k=-1;
while(ok){
minim=inf;
for(int i=1;i<=n;i++)
if(!viz[i] && l[i]<minim)
minim=l[i], k=i;
if(minim != inf){
viz[k]=true;
for(it=v[k].begin(); it!=v[k].end();it++)
if(!viz[it->dest] && l[it->dest]>l[k]+it->cost)
l[it->dest]=l[k]+it->cost, tata[it->dest]=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;
}