Pagini recente » Cod sursa (job #2852702) | Cod sursa (job #3185479) | Cod sursa (job #2266256) | Cod sursa (job #2908983) | Cod sursa (job #2141405)
#include <iostream>
#include <climits>
#include <fstream>
using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
#define inf 300000
int t[1001],d[1001],n,m,x,y,c,ns,a[1001][1001],k=0;;
bool sel[1001];
int dmin (int *v, int n)
{
int m=inf,pozm;
for(int i=1; i<=n; i++)
if(v[i]<m && !sel[i])
{
m=v[i];
pozm=i;
}
return pozm;
}
bool completat()
{
for(int i=1; i<=n; i++)
if(sel[i]==0) return false;
return true;
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>x>>y>>c;
a[x][y]=a[y][x]=c;
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(a[i][j]==0 && i!=j)
a[i][j]=a[j][i]=inf;
for(int i=1; i<=n; i++)
d[i]=a[1][i];
sel[1]=1;
d[1]=0;
/*for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
cout<<a[i][j]<<' ';
cout<<endl;
}*/
do
{
m=dmin(d,n);
sel[m]=1;
//cout<<m<<' '<<d[m]<<endl;
for(int i=1; i<=n; i++)
{
if(d[m]+a[m][i]<d[i]&&i!=m)
{
d[i]=d[m]+a[m][i];
t[i]=m;
}
}
/*for(int i=1; i<=n; i++)
cout<<d[i]<<' ';
cout<<endl;
break;*/
}
while(d[m]!=inf && !completat());
for(int i=2; i<=n; i++)
g<<d[i]<<' ';
return 0;
}