Pagini recente » Cod sursa (job #265088) | Cod sursa (job #1394275) | Cod sursa (job #2329213) | Monitorul de evaluare | Cod sursa (job #312315)
Cod sursa(job #312315)
#include<fstream>
#define N 105
#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;
}
}
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++)
{
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;
}