Pagini recente » Cod sursa (job #3203565) | Cod sursa (job #996388) | Cod sursa (job #2614257) | Cod sursa (job #2678320) | Cod sursa (job #1916523)
#include <iostream>
#include <fstream>
#define INF 100000000
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int graf[104][104],tati[104],dist[104],viz[104];
int n,p,i,j,x,y,c;
void afis()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) cout<<graf[i][j]<<" ";
cout<<endl;
}
}
void dk(int x)
{
int k;
viz[x]=1;
for(int i=1;i<=n;i++)
{
dist[i]=graf[x][i];
tati[i]=x;
}
tati[x]=0;
int mi;
bool ok=true;
while(ok)
{
mi=INF;
for(int i=1;i<=n;i++)
{
if(viz[i]==0 && dist[i]<mi) {mi=dist[i];k=i;}
}
if(mi==INF)ok=false;
else
{
viz[k]=1;
for(int i=1;i<=n;i++)
{
if(viz[i]==0 && dist[k]+graf[k][i]<dist[i]) {dist[i]=dist[k]+graf[k][i],tati[i]=k;}
}
}
}
}
int main()
{
fin>>n>>p;
for(i=1;i<=n;i++)
{
graf[i][i]=0;
for(j=1;j<=n;j++)if(i!=j)graf[i][j]=INF;
}
while(fin>>x>>y>>c) {graf[x][y]=c;}
dk(p);
for(i=1;i<=n;i++)
{
if(dist[i]==INF) fout<<-1<<" ";
else fout<<dist[i]<<" ";
}
return 0;
}