Pagini recente » Cod sursa (job #473423) | Cod sursa (job #2655682) | Cod sursa (job #3138746) | Cod sursa (job #1869099) | Cod sursa (job #693985)
Cod sursa(job #693985)
#include<fstream>
#define nmax 10000
#define INF 1<<25
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int a[nmax][nmax],d[nmax],n,m;
void citire()
{f>>n>>m;
int x,y,z;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=INF;
for(int i=1;i<=m;i++) {f>>x>>y>>z; a[x][y]=a[y][x]=z;}
}
void dijkstra()
{int viz[nmax];
for (register int i = 1; i<=n; i++) d[i] = a[1][i];
for(register int i=0;i<=n;i++) viz[i]=0;
viz[1]=1;
int ok=1;
int minim=INF;
int k=0;
while (ok)
{minim=INF;
for (register int i=1;i<=n;i++) if(!viz[i] && minim>d[i]) { minim=d[i]; k=i; };
if (minim!=INF )
{viz[k]=1;
for (int j=1;j<=n;j++) if (!viz[j] && d[j]>d[k]+a[k][j]) d[j] = d[k]+a[k][j];
}
else ok=0;
}
for(int i=2;i<=n;i++) g<<d[i]<<" ";
g<<"\n";
}
int main()
{citire();
dijkstra();
return 0;
}