Pagini recente » Cod sursa (job #2703551) | Cod sursa (job #1504509) | Cod sursa (job #3265849) | Cod sursa (job #2734648) | Cod sursa (job #1942176)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define MAX_N 30005
using namespace std;
int n,m,x,y,c,a,b,d[MAX_N];
bool EinCoada[MAX_N];
struct muchie
{
int vecin,cost;
};
vector<muchie> v[MAX_N];
queue<int> coada;
int main()
{
FILE *intrare,*iesire;
int i,nod;
muchie t,tt;
intrare=fopen("sate.in","r");
iesire=fopen("sate.out","w");
fscanf(intrare,"%d%d%d%d",&n,&m,&x,&y);
for (i=0; i<=m-1; ++i)
{
fscanf(intrare,"%d%d%d",&a,&b,&c);
t.vecin=b;
t.cost=c;
tt.vecin=a;
tt.cost=c;
v[a].push_back(t);
v[b].push_back(tt);
}
for (i=1; i<=n; ++i)
d[i]=-1;
coada.push(x);
d[x]=0;
EinCoada[x]=true;
while (!coada.empty())
{
nod=coada.front();
//printf("%d ",nod);
for (i=0; i<v[nod].size(); ++i)
{
muchie m;
m=v[nod][i];
if (d[m.vecin]==-1 || d[nod]+m.cost<d[m.vecin] )
{
d[m.vecin]=d[nod]+m.cost;
if (EinCoada[m.vecin]==false)
coada.push(m.vecin);
}
}
EinCoada[nod]=false;
coada.pop();
}
for (i=1; i<=n; ++i)
fprintf(iesire,"%d ",d[i]);
printf("%d ",d[y]);
}