Pagini recente » Cod sursa (job #2551593) | Cod sursa (job #2783420) | Cod sursa (job #763177) | Cod sursa (job #2752303) | Cod sursa (job #585244)
Cod sursa(job #585244)
#include<fstream>
#define maxvf 50001
#define inf 10000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n;
double C[1000][1000],d[maxvf];
int pre[maxvf],M[maxvf];
void initializare()
{
int i,j,m,x,y;
double c;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
C[j][i]=C[i][j]=inf;
while(f>>x>>y>>c)
{
//m++;
C[x][y]=c;
}
for(i=1;i<=n;i++)
{
d[i]=C[1][i];
pre[i]=1;
}
M[1]=1;
pre[1]=0;
f.close();
}
void afisare()
{
int i,j,lg,dr[maxvf];
for(i=1;i<=n;i++)
if(i!=1)
{
//g<<"costul minim de la "<<x0<<" la "<<i<<" este "<<d[i]<< "\n";
//g<<"drumul de cost minim: ";
g<<d[i]<<" ";
dr[0]=i;
lg=0;
while(pre[dr[lg]])
{
lg++;
dr[lg]=pre[dr[lg-1]];
}
//for(j=lg;j>=0;j--)
//g<<" "<<dr[j]<<" ";
//g<<"\n";
}
}
int main()
{
int i,vfmin,j;
double dmin;
initializare();
for(j=1;j<n;j++)
{
dmin=inf;
for(i=1;i<=n;i++)
if(!M[i]&&dmin>d[i])
{
dmin=d[i];
vfmin=i;
}
M[vfmin]=1;
for(i=1;i<=n;i++)
if(!M[i]&&d[i]>dmin+C[vfmin][i])
{
pre[i]=vfmin;
d[i]=dmin+C[vfmin][i];
}
}
afisare();
return 0;
}