Pagini recente » Cod sursa (job #2878769) | Cod sursa (job #1491340) | Cod sursa (job #3120544) | Cod sursa (job #2956574) | Cod sursa (job #561933)
Cod sursa(job #561933)
#include <queue>
#include <vector>
#define NMAX 50005
#define DMAX 0x3f3f3f3f
using namespace std;
typedef pair<int,int> pereche;
void citire(),rezolvare(),afisare();
int M,N;
vector<pereche> G[NMAX];
int distanta[NMAX];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
rezolvare();
afisare();
return 0;
}
void afisare()
{
for(int i=2;i<=N;i++)
printf("%d ",distanta[i]!=DMAX?distanta[i]:0);
}
void rezolvare()
{
queue<int> coada;
bool inCoada[NMAX];
memset(distanta,DMAX,sizeof(distanta));
memset(inCoada,false,sizeof(inCoada));
coada.push(1);
inCoada[1]=true;
distanta[1]=0;
while(!coada.empty())
{
int tata=coada.front();
coada.pop();
for(vector<pereche>::iterator i=G[tata].begin();i!=G[tata].end();i++)
if(distanta[(*i).first]>distanta[tata]+(*i).second)
{
distanta[(*i).first]=distanta[tata]+(*i).second;
if(!inCoada[(*i).first])
coada.push((*i).first),
inCoada[(*i).first]=true;
}
inCoada[tata]=false;
}
}
void citire()
{
int s,d,c;
scanf("%d %d",&N,&M);
for(int i=0;i<M;i++)
scanf("%d %d %d",&s,&d,&c),
G[s].push_back(pereche(d,c));
}