Pagini recente » Cod sursa (job #1223012) | Cod sursa (job #1376208) | Cod sursa (job #31642) | Cod sursa (job #869677) | Cod sursa (job #312321)
Cod sursa(job #312321)
#include<fstream>
#define N 2005
#define W 250000000
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
int a[N][N],n,m,d[N-1];
bool viz[N];
void citire ()
{
in>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]=W;
}
}
for(int i=1;i<=n;i++)
{
a[i][i]=0;
}
int x,y,z;
for(int i=1;i<=m;i++)
{
in>>x>>y>>z;
a[x][y]=z;
}
}
inline int minim ()
{
int min=W,mini;
for(int i=1;i<=n;i++)
{
if(!viz[i] && min>d[i])
{
min=d[i];
mini=i;
}
}
return mini;
}
void scrie ()
{
for(int i=2;i<=n;i++)
{
if(d[i]==W)
{
d[i]=0;
}
out<<d[i]<<" ";
}
out<<"\n";
}
void calcul (int x)
{
for(int i=1;i<=n;i++)
{
d[i]=W;
}
d[x]=0;
for(int i=1;i<=n;i++)
{
x=minim ();
viz[x]=true;
for(int j=1;j<=n;++j)
if(a[x][j]+d[x]<d[j])
{
d[j]=a[x][j]+d[x];
}
}
}
int main ()
{
citire ();
calcul (1);
scrie ();
in.close ();
out.close ();
return 0;
}