Pagini recente » Cod sursa (job #2231797) | Cod sursa (job #2921993) | Cod sursa (job #1970448) | Cod sursa (job #642377) | Cod sursa (job #1599902)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
FILE *f1=fopen("dijkstra.in","r");
FILE *f2=fopen("dijkstra.out","w");
int n,m,d[50001],i;
class comp{
public:
bool operator() (const int&a,const int&b){
return d[a]>d[b];
}
};
priority_queue<int,vector<int>,comp>Q;
struct nod{
int inf,drum;
nod *urm;
}*L[50001];
void adaugaresf(nod *&vf,int val1,int val2){
nod *q;
q=new nod;
q->inf=val1;
q->drum=val2;
q->urm=vf;
vf=q;
}
void citire(){
fscanf(f1,"%d %d",&n,&m);
int k,a,b,c;
for (k=1;k<=m;k++){
fscanf(f1,"%d %d %d",&a,&b,&c);
adaugaresf(L[a],b,c);
adaugaresf(L[b],a,c);
}
fclose(f1);
}
void dijkstra(int r){
d[r]=0;
nod *q;
int x;
Q.push(r);
while(!Q.empty()){
x=Q.top();
Q.pop();
q=L[x];
while(q!=0){
if (q->drum+d[x]<d[q->inf]){
d[q->inf]=q->drum+d[x];
Q.push(q->inf);
}
q=q->urm;
}
}
}
int main(){
citire();
for (i=1;i<=n;i++)
d[i]=10000000;
dijkstra(1);
for (i=2;i<=n;i++)
fprintf(f2,"%d ",d[i]);
fclose(f2);
return 0;
}