Pagini recente » Cod sursa (job #1766773) | Cod sursa (job #2805617) | Cod sursa (job #3166486) | Cod sursa (job #1394506) | Cod sursa (job #663682)
Cod sursa(job #663682)
#include<cstdio>
#include<climits>
#define MAX 250005
#define MAX2 50005
#define inf INT_MAX
int X[MAX],Y[MAX],Cost[MAX];
int D[MAX2],S[MAX2],T[MAX2];
int n,m;
void read(){
freopen("dijkstra.in","r",stdin);
scanf("%d%d",&n,&m);
/* Initializare */
for(int i=2;i<=n;i++)
D[i]=inf;
S[1]++;
/* Citire si initializarea array-ului de costuri D */
for(int i=1;i<=m;i++){
scanf("%d%d%d",&X[i],&Y[i],&Cost[i]);
if(X[i]==1){
D[Y[i]]=Cost[i];
T[Y[i]]=1;
}
}
fclose(stdin);
}
void NOD(int &nod,int &min){
min=INT_MAX;
for(int i=1;i<=n;i++)
if(!S[i] && D[i]<min){
min=D[i];
nod=i;
}
}
void Dijkstra(){
for(int i=1;i<=n-1;i++){
/* Caut minimul din D cu proprietatea ca S[i] = 0 */
int nod,min;
NOD(nod,min);
/* Selectez nodul */
S[nod]++;
/* Caut o ruta mai scurta prin nod pentru a ajunge la restul nodurilor */
for(int j=1;j<=m;j++)
if(X[j]==nod && !S[Y[j]])
if(min+Cost[j]<D[Y[j]]){
D[Y[j]]=min+Cost[j];
T[Y[j]]=nod;
}
/* */
}
}
void write(){
freopen("dijkstra.out","w",stdout);
for(int i=2;i<=n;i++){
if(D[i]==inf) printf("0 ");
else printf("%d ",D[i]);
}
fclose(stdout);
}
int main(){
read();
Dijkstra();
write();
return 0;
}