Pagini recente » Cod sursa (job #1825673) | Cod sursa (job #1252857) | Cod sursa (job #157494) | Cod sursa (job #472871) | Cod sursa (job #1256574)
#include <fstream>
#define INF 1000000
using namespace std;
FILE *fin,*fout;
struct elem {int x;int cost;} M[5010][5010];
int tata[50010],cmin[50010];
int use[50010];
int cost(int a,int b);
int n,m,xs;
int main()
{
int i,a,b,val,ok,minim,unde;
fin=fopen("dijkstra.in","r");
fout=fopen("dijkstra.out","w");
fscanf(fin,"%d %d",&n,&m);
for(i=1;i<=n;i++) cmin[i]=INF;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&a,&b,&val);
M[a][0].x++;
M[a][M[a][0].x].x=b;
M[a][M[a][0].x].cost=val;
M[b][0].x++;
M[b][M[b][0].x].cost=val;
}
ok=1;
cmin[1]=0;
while(ok)
{
minim=INF;
for(i=1;i<=n;i++)
if(!use[i] && minim>cmin[i])
{
minim=cmin[i];
unde=i;
}
if(minim!=INF)
{
use[unde]=1;
for(i=1;i<=n;i++)
{
val=cost(unde,i);
if (!use[i] && cmin[i]>cmin[unde]+val)
{
cmin[i] = cmin[unde]+val;
tata[i] = unde;
}
}
}
else ok=0;
}
for(i=2;i<=n;i++)
if(cmin[i]==INF)
fprintf(fout,"0 ");
else
fprintf(fout,"%d ",cmin[i]);
fprintf(fout,"\n");
return 0;
}
int cost(int a, int b)
{
int i;
for(i=1;i<=M[a][0].x;i++)
if(M[a][i].x==b)
return M[a][i].cost;
return INF;
}