Pagini recente » Cod sursa (job #1349991) | Istoria paginii utilizator/dragonking3499 | Cod sursa (job #552258) | Cod sursa (job #429743) | Cod sursa (job #1799181)
#include <fstream>
#include <vector>
#include <climits>
#include <bitset>
#define N 50005
using namespace std;
int n,m,a1,b1,c1,k;
typedef struct NOD{
int v, c;
} NOD;
vector<NOD> graf[N];
int dist[N];
bitset <N> viz;
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
fin>>n>>m;
for(int i=1;i<=n;i++)
{
dist[i]=INT_MAX;
}
for(int i=1;i<=m;i++)
{
fin>>a1>>b1>>c1;
NOD nod;
nod.c=c1;
nod.v=b1;
graf[a1].push_back(nod);
}
dist[1]=0;
for(int i=0;i<graf[1].size();i++)
{
dist[graf[1][i].v]=graf[1][i].c;
}
viz[1]=1;
int mi=INT_MAX;
for(int i=2;i<=n;i++)
{
if(dist[i]<mi)
{
mi=dist[i];
k=i;
}
}
viz[k]=1;
int vi=1;
while(vi!=0)
{
vi=0;
for(int i=0;i<graf[k].size();i++)
{
int s=graf[k][i].c;
if(dist[graf[k][i].v]>s+dist[k])
{
dist[graf[k][i].v]=s+dist[k];
}
}
mi=INT_MAX;
for(int i=2;i<=n;i++)
{
if(viz[i]==0&&dist[i]<mi)
{
mi=dist[i];
k=i;
vi=1;
}
}
viz[k]=1;
}
for(int i=2;i<=n;i++)
{
if(dist[i]==INT_MAX)
{
fout<<"0"<<" ";
}
else
{
fout<<dist[i]<<" ";
}
}
return 0;
}