Pagini recente » Cod sursa (job #2089610) | Cod sursa (job #3251016) | Cod sursa (job #2660378) | Cod sursa (job #3180572) | Cod sursa (job #856344)
Cod sursa(job #856344)
#include <fstream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define Nmax 50005
#define INF 0x3f
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct arc{
int v,c;
};
vector<arc> a[Nmax];
int n, d[Nmax];
void citire()
{
int m,i,x,y,c;
arc z;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
z.v=y;z.c=c;
a[x].push_back(z);
}
}
void afis()
{
vector<arc>::iterator it;
int i;
for(i=1;i<=n;i++){g<<i<<": ";
for(it=a[i].begin();it!=a[i].end();it++)
g<<(*it).v<<" "<<(*it).c<<'\n';
}
}
void BF()
{
queue<int> q;
bool eq[Nmax];
int x;
vector<arc>::iterator it;
memset(d,INF,sizeof(d));
memset(eq,false,sizeof(eq));
q.push(1);d[1]=0;
while(!q.empty())
{
x=q.front();q.pop();
for(it=a[x].begin();it!=a[x].end();++it)
if(d[(*it).v]>d[x]+(*it).c)
{
d[(*it).v]=d[x]+(*it).c;
if(!eq[(*it).v])
{
q.push((*it).v);
eq[(*it).v]=true;
}
}
}
}
void afisare()
{
int i;
for(i=2;i<=n;++i)
if(d[i]==INF)g<<0<<' ';
else g<<d[i]<<' ';
}
int main()
{
citire();
BF();
afisare();
return 0;
}