Pagini recente » Cod sursa (job #1839693) | Cod sursa (job #351092) | Cod sursa (job #256852) | Cod sursa (job #2086598) | Cod sursa (job #1111046)
#include <iostream>
#include <queue>
#include <stdio.h>
#include <vector>
#include <limits.h>
using namespace std;
struct nod{
int inf;
int cost;
nod *next;}*aux,*p,*prim[100000];
int d[100000],t[100000],n,m,viz[100000],sol[100000],l=0,s,f;
FILE *fin=fopen("dijkstra.in","r");
FILE *fout=fopen("dijkstra.out","w");
struct comp
{
bool operator()(pair<int,int> n1,pair<int,int> n2)
{
return(n1.second>n2.second);
}
};
priority_queue<pair<int,int>,vector<pair<int,int> >,comp> q;
void read()
{
fscanf(fin,"%d %d",&n,&m);
int i,x,y,c;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&x,&y,&c);
aux=new nod;
aux->inf=y;
aux->cost=c;
aux->next=prim[x];
prim[x]=aux;
aux=new nod;
aux->inf=x;
aux->cost=c;
aux->next=prim[y];
prim[y]=aux;
}
fscanf(fin, "%d %d",&s,&f);
}
void init(int start)
{
int i;
for(i=1;i<=n;i++)
t[i]=start;
t[start]=0;
for(i=1;i<=n;i++)
d[i]=INT_MAX/2;
d[start]=0;
for(p=prim[start];p;p=p->next)
d[p->inf]=p->cost;
viz[start]=1;
q.push(make_pair(start,d[start]));
for(p=prim[start];p;p=p->next)
q.push(make_pair(p->inf,d[p->inf]));
}
void afish(int i)
{
if(t[i])
{
sol[++l]=t[i];
afish(t[i]);
}
}
void djikstra(int start)
{
init(start);
int nodc,i;
while(!q.empty())
{
nodc=q.top().first;
q.pop();
viz[nodc]=1;
for(p=prim[nodc];p;p=p->next)
if(!viz[p->inf] && d[p->inf]>d[nodc]+p->cost)
{
d[p->inf]=d[nodc]+p->cost;
t[p->inf]=nodc;
q.push(make_pair(p->inf,d[p->inf]));
}
}
for(i=2;i<=n;i++)
fprintf(fout,"%d ",d[i]);
}
int main()
{
read();
djikstra(1);
return 0;
}