Pagini recente » Cod sursa (job #616959) | Cod sursa (job #167654) | Cod sursa (job #2803911) | Cod sursa (job #402737) | Cod sursa (job #729900)
Cod sursa(job #729900)
#include <fstream>
using namespace std;
ifstream fin("djikstra.in");
ofstream fout("djikstra.out");
struct nod{int inf;int cost;nod *next;};
typedef nod *lista;
int d[50001];
lista lv[50001],aux;
bool cmp(int a,int b){return (d[a]>d[b]);}
int main()
{
memset(d,1000000,sizeof(d));
int n,m,x,y,z,i;
fin>>n>>m;
for(i=1;i<=n;i++)lv[i]=NULL;
for(i=1;i<=m;i++)
{fin>>x>>y>>z;
aux=new nod;
aux->inf=x;
aux->next=lv[y];
aux->cost=z;
lv[y]=aux;
aux=new nod;
aux->inf=y;
aux->next=lv[x];
aux->cost=z;
lv[x]=aux;}
for(aux=lv[1];aux;aux=aux->next)d[aux->inf]=aux->cost;
int v[50001];
for(i=1;i<=n;i++)v[i]=i;
int nr;
nr=n;
make_heap(v+1,v+n+1,cmp);
for(i=1;i<n;i++)
{for(aux=lv[v[1]];aux;aux=aux->next)
if(d[v[1]]+aux->cost<d[aux->inf])d[aux->inf]=d[v[1]]+aux->cost;
pop_heap(v+1,v+nr+1);
nr--;
sort_heap(v+1,v+nr+1,cmp);
}
for(i=2;i<=n;i++)fout<<d[i]<<" ";
return 0;}