Pagini recente » Cod sursa (job #128133) | Cod sursa (job #388666) | Cod sursa (job #2863039) | Cod sursa (job #1518734) | Cod sursa (job #2352575)
#include <cstdio>
#include <queue>
#include <vector>
#define N 50002
#define INF 2000000000
using namespace std;
FILE *f,*g;
struct bla
{
int no,co;
};
struct cmp
{
bool operator() (bla A, bla B)
{
return (A.co>B.co);
}
};
priority_queue <bla, vector <bla>,cmp>q;
struct bla1
{
int ve,c;
};
vector <bla1> graf[N];
int dist[N];
bool viz[N];
int main()
{
f=fopen("dijkstra.in","r");
g=fopen("dijkstra.out","w");
int n,m;
int x,y,cc;
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d %d",&x,&y,&cc);
graf[x].push_back({y,cc});
}
q.push({1,0});
for(int i=2;i<=n;++i)
dist[i]=INF;
int nod;
while(!q.empty())
{
nod=q.top().no;
q.pop();
if(!viz[nod])
{for(int i=0;i<graf[nod].size();++i)
if(dist[graf[nod][i].ve]>dist[nod]+graf[nod][i].c)
{
dist[graf[nod][i].ve]=dist[nod]+graf[nod][i].c;
q.push({graf[nod][i].ve,dist[graf[nod][i].ve]});
}
}
viz[nod]=1;
}
for(int i=2;i<=n;++i)
if(dist[i]==INF)
fprintf(g,"0 ");
else
fprintf(g,"%d ",dist[i]);
fclose(f);
fclose(g);
return 0;
}