Pagini recente » Cod sursa (job #1214420) | Cod sursa (job #1740226) | Cod sursa (job #2472286) | Cod sursa (job #624520) | Cod sursa (job #560054)
Cod sursa(job #560054)
#include<fstream>
#include<vector>
using namespace std;
#define Nmax 50004
#define inf INT_MAX
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
struct nod{int val,nr;};
vector<nod>v[Nmax];
int N,M;
int pre[Nmax],viz[Nmax],cost[Nmax];
void citire()
{
in>>N>>M;
int i,j,k;
nod p;
for(i=1;i<=N;i++)
{
p.nr=i;
p.val=0;
v[i].push_back(p);
}
while(in>>i>>j>>k)
{
p.nr=j;
p.val=k;
v[i].push_back(p);
p.nr=i;
p.val=k;
v[j].push_back (p);
}
in.close();
}
void djk()
{
int i,j,vfmin,dmin;
for(i=1;i<=N;i++)
{
cost[i]=inf;
pre[i]=1;
}
for(i=1;i<v[1].size();i++)
{
cost[v[1][i].nr]=v[1][i].val;
}
viz[1]=1;
pre[1]=0;
for(j=1;j<=N;j++)
{
dmin=inf;
for(i=1;i<v[j].size();i++)
{
if(!viz[v[j][i].nr]&&cost[v[j][i].nr]<dmin)
{
dmin=cost[v[j][i].nr];
vfmin=v[j][i].nr;
}
}
viz[vfmin]=1;
for(i=1;i<v[vfmin].size();i++)
{
if(!viz[v[vfmin][i].nr]&&cost[v[vfmin][i].nr]>dmin+v[vfmin][i].val)
{
pre[i]=vfmin;
cost[v[vfmin][i].nr]=dmin+v[vfmin][i].val;
}
}
}
}
int main()
{
citire();
djk();
/*for(int i=1;i<=N;i++)
{
for(int j=0;j<v[i].size();j++)
out<<v[i][j].nr<<" "<<v[i][j].val<<" ";
out<<endl;
}*/
for(int i=2;i<=N;i++)
out<<cost[i]<<" ";
out.close();
}