Pagini recente » Cod sursa (job #1328357) | Cod sursa (job #2575936) | Cod sursa (job #862671) | Cod sursa (job #2965263) | Cod sursa (job #1301577)
#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];
int dijkstra(int n)
{
bool f[n];
int y[n];
int i;
for(i=0;i<n;++i)
{
y[i]=INT_MAX;
f[i]=false;
}
y[0]=0;
int j;
int minn,z;
drum x;
list<drum>::iterator k;
for(i=0;i<n-1;++i)
{
minn=INT_MAX;
for(j=0;j<n;++j)
if(y[j]<minn&&f[j]==false)
{
minn=y[j];
z=j;
}
f[z]=true;
for(k=l[z].begin();k!=l[z].end();++k)
{
x=*k;
if(y[x.d]>minn+x.l)
y[x.d]=minn+x.l;
}
}
FILE* so=fopen("dijkstra.out","w");
for(i=1;i<n;++i)
{
if(y[i]==INT_MAX)
fprintf(so,"0 ");
else
fprintf(so,"%i ",y[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);
}