Pagini recente » Cod sursa (job #2957026) | Cod sursa (job #2519406) | Cod sursa (job #1356369) | Cod sursa (job #107019) | Cod sursa (job #688643)
Cod sursa(job #688643)
#include<stdio.h>
#include<stdlib.h>
#define inf 10000
FILE *fin = fopen("dijkstra.in","r");
FILE *fout = fopen("dijkstra.out","w");
int contor,a[1001][1001],n,m,c,i,j,x,y,min=9999999,nrLanturi,viz[1001],is,js,pre[1001],d[1001],cost;
void citire()
{
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j] = inf;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&c);
a[x][y] = c;
a[y][x] = c;
}
}
void init()
{
for(i=1;i<=n;i++)
d[i] = a[1][i];
pre[1] = 0;
d[1]=0;
viz[1]=1;
}
void djikstra()
{
int valMin,vfMin;
for(j=1;j<n;j++)
{
valMin = inf;
for(i=1;i<=n;i++)
{
if(!viz[i] && d[i]<valMin)
valMin=d[i],vfMin=i;
}
viz[vfMin]=1;
for(i=1;i<=n;i++)
{
if(!viz[i] && d[i]> valMin + a[vfMin][i])
{
d[i] = valMin + a[vfMin][i];
pre[i]=vfMin;
}
}
}
min = d[js];
}
void scrie()
{
for(i=2;i<=n;i++)
fprintf(fout,"%d ",d[i]);
}
/*void dfs(int x)
{
viz[x]=1;
int i,ok=0;
for(i=1;i<=n;i++)
if(!viz[i] && a[x][i] != 10000 && cost<=min)
{
//cost += a[x][i];
ok=1;
dfs(i);
//cost -= a[x][i];
}
if(i>n && !ok)
if(x == js && cost == min)
contor++;
}*/
int main()
{
citire();
init();
djikstra();
//for(i=1;i<=n;i++)
// viz[i]=0;
//dfs(is);
scrie();
}