Pagini recente » Cod sursa (job #1030363) | Cod sursa (job #3256359) | Cod sursa (job #133289) | Cod sursa (job #2574761) | Cod sursa (job #2970013)
#include <bits/stdc++.h>
#define INF 10000
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int v[105],a[105][105],d[105];
int n,p,x,y,c;
struct compara
{
bool operator()(int x,int y)
{
return d[x]>d[y];
}
};
priority_queue<int,vector<int>,compara> q;
void Dijkstra()
{
while(!q.empty())
{
int x=q.top();
q.pop();
v[x]=0;
for(int i=1;i<=n;++i)
if(a[x][i]&&d[x]+a[x][i]<d[i])
{
d[i]=d[x]+a[x][i];
if(v[i]==0)
{
q.push(i);
v[i]=1;
}
}
}
}
int main()
{
fin >> n>>p;
while(fin>>x)
{
fin >>y>>c;
a[x][y]=c;
}
q.push(p);
v[p]=1;
for(int i=1;i<=n;i++)
d[i]=INF;
d[p]=0;
Dijkstra();
for(int i=1;i<=n;++i)
if(d[i]!=INF)fout<<d[i]<<" ";
else fout<<-1 <<" ";
return 0;
}