Pagini recente » Cod sursa (job #9682) | Cod sursa (job #2145252) | Cod sursa (job #2876051) | Cod sursa (job #1644323) | Cod sursa (job #968166)
Cod sursa(job #968166)
#include <fstream>
#include <bitset>
#include <list>
#include <queue>
using namespace std;
#define inf 250000005
int d[50005];
bitset<50005> viz;
struct elem
{
int ind;
int val;
};
struct nod
{
list<elem> vecini;
}graf[50005];
bool operator<(const elem &a,const elem &b)
{
if(a.val<b.val)
return 1;
return 0;
}
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
priority_queue<elem> coada;
int n,m,a,b,c,i;
elem aux;
fin>>n>>m;
for(i=0;i<m;i++)
{
fin>>a>>b>>c;
a--;
b--;
aux.ind=b;
aux.val=c;
graf[a].vecini.push_back(aux);
}
for(i=1;i<n;i++)
d[i]=inf;
aux.ind=0;
aux.val=0;
coada.push(aux);
//viz[0]=1; - fals (daca fac asa, atunci nici macar nu incepe algoritmul)
list<elem>::iterator it;
elem aux2;
while(!coada.empty())
{
aux=coada.top();
//cout<<"extragem "<<aux.ind<<endl;
coada.pop();
if(!viz[aux.ind])
{
viz[aux.ind]=1;
for(it=graf[aux.ind].vecini.begin();it!=graf[aux.ind].vecini.end();it++)
{
if(aux.val+(*it).val<d[(*it).ind])
{
d[(*it).ind]=aux.val+(*it).val;
aux2.ind=(*it).ind;
aux2.val=d[(*it).ind];
coada.push(aux2);
}
}
}
}
for(i=1;i<n;i++)
if(d[i]==inf)
fout<<"0 ";
else
fout<<d[i]<<' ';
fout<<'\n';
fin.close();
fout.close();
return 0;
}