Pagini recente » Cod sursa (job #2563301) | Cod sursa (job #1516412) | Cod sursa (job #137624) | Cod sursa (job #2040628) | Cod sursa (job #1301575)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<list>
#include<limits.h>
#include<bitset>
using namespace std;
struct drum
{
int d;
int l;
};
list<drum> l[50000];
void dijkstra(int n)
{
int i;
int m[n+1];
int j;
bitset<50000> fol;
for(i=1;i<=n;++i)
{
m[i]=INT_MAX;
fol[i-1]=0;
}
m[0]=0;
int d[n];
d[0]=0;
int minn,z=0;
for(i=0;i<n-1;++i)
{
fol[z]=1;
list<drum>::iterator k;
drum x;
minn=INT_MAX;
for(k=l[z].begin();k!=l[z].end();++k)
{
x=*k;
if(m[x.d+1]>m[0]+x.l)
{
m[x.d+1]=m[0]+x.l;
}
}
for(j=1;j<=n;++j)
{
if(m[j]<=minn)
if(fol[j-1]==0)
{
minn=m[j];
z=j-1;
}
}
d[z]=m[z+1];
m[0]=minn;
}
FILE* so=fopen("dijkstra.out","w");
for(i=1;i<n;++i)
{
if(d[i]==INT_MAX)
fprintf(so,"0 ");
else
fprintf(so,"%i ",d[i]);
}
fprintf(so,"\n");
}
int main()
{
ifstream si;
si.open("dijkstra.in");
int n,m;
si>>n>>m;
int i;
int a,b,c;
for(i=0;i<m;++i)
{
si>>a>>b>>c;
--a;
--b;
l[a].push_back({b,c});
l[b].push_back({a,c});
}
dijkstra(n);
}