Pagini recente » Cod sursa (job #904413) | Cod sursa (job #642374) | Cod sursa (job #1634885) | Cod sursa (job #404202) | Cod sursa (job #902006)
Cod sursa(job #902006)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 1005
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int a[NMAX][NMAX],v[NMAX],viz[NMAX],tata[NMAX],i,j,n,m,x,y,c,minn=9999,nod,ok;
int min()
{
int i,k;
minn=9999;
for (i=1;i<=n;i++)
{
if ((v[i]<=minn)&&(viz[i]==0)){minn=v[i];k=i;}
}
return k;
}
void dijkstra (int x0)
{
for (i=1;i<=n;i++){v[i]=a[x0][i];tata[i]=x0;}
viz[x0]=1;tata[x0]=0;ok=1;
while (ok==1)
{
nod=min();
viz[nod]=1;
if (minn!=9999)
{
for(i=1;i<=n;i++)
{
if ((v[nod]+a[nod][i]<=v[i])&&(viz[i]==0)&&(a[nod][i]!=9999))
{
v[i]=v[nod]+a[nod][i];
tata[i]=nod;
}
}
}
else ok=0;
}
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
if (i!=j){a[i][j]=9999;}
}
for (i=1;i<=m;i++){f>>x>>y>>c;a[x][y]=c;}
dijkstra (1);
for (i=2;i<=n;i++)
{
if (v[i]!=9999)
g<<v[i]<<" ";
else g<<0<<" ";
}
}