Pagini recente » Cod sursa (job #518082) | Cod sursa (job #2818352) | Cod sursa (job #976709) | Cod sursa (job #2744776) | Cod sursa (job #321538)
Cod sursa(job #321538)
#include <map>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define INF 10000000
vector<map<int,int> > v;
int n,m;
int D[50001];
bool S[50001];
void citire()
{
fstream f;
f.open("dijkstra.in",ios::in);
f>>n>>m;
v.resize(n+1);
int x,y,cost;
for(int i=1; i<=m; i++)
{
f>>x>>y>>cost;
v[x][y]=cost;
v[y][x]=cost;
}
f.close();
for(int i=1; i<=n; i++)
D[i]=INF;
map<int,int>::iterator mp;
for(mp=v[1].begin(); mp!=v[1].end(); mp++)
D[mp->first]=mp->second;
}
int alege_nod()
{
int k=0;
int d=INF;
for(int i=1; i<=n; i++)
if(S[i]==false)
if(D[i]<d)
{
d=D[i];
k=i;
}
return k;
}
void dijkstra(int nod)
{
S[nod]=true;
int i;
for(i=1; i<=n; i++)
if(nod!=i && nod!=1 && i!=1)
{
int x=v[nod][i];
if(x==0)
x=INF;
if( D[nod] + x < D[i])
D[i]=D[nod]+x;
}
int k=alege_nod();
if(k!=0)
return dijkstra(k);
}
void Debug()
{
cout<<endl<<"D: ";
for(int i=1; i<=n; i++)
cout<<D[i]<<" ";
cout<<endl;
for(int i=1 ;i<=n; i++)
cout<<S[i]<<" ";
cout<<endl;
}
int main()
{
citire();
S[1]=true;
int k=alege_nod();
dijkstra(k);
//Debug();
ofstream g("dijkstra.out");
for(int i=2; i<=n; i++)
g<<D[i]<<" ";
return 0;
}