Pagini recente » Cod sursa (job #1648836) | Cod sursa (job #1070502) | Cod sursa (job #1900024) | Cod sursa (job #1702179) | Cod sursa (job #671437)
Cod sursa(job #671437)
#include<fstream>
#include<vector>
#define maxn 50001
#define inf 0x3fffffff
using namespace std;
ifstream f("dijkstra.in"); ofstream g("dijkstra.out");
struct graf {int nod, cost; };
int n,m;
vector <graf> a[maxn];
int d[maxn], q[maxn];
inline void add(int , int , int );
void read(),solve(),write();
int main()
{read();
solve();
write();
return 0;
}
inline void add(int x, int y, int z)
{graf e;
e.nod=y; e.cost=z; a[x].push_back(e);
}
void read()
{f>>n>>m;
for(int x,y,z,i=1;i<=m;++i) f>>x>>y>>z,add(x, y, z);
}
void solve() //Dijkstra
{for(int i=2;i<=n;++i) d[i]=inf;
int minim, pmin = 0;
for ( int i = 1; i <= n; ++i )
{minim = inf;
for ( int j = 1; j <= n; ++j ) if ( d[j] < minim && !q[j] ) minim = d[j], pmin = j;
q[pmin] = 1;
for(unsigned int j=0; j<a[pmin].size(); ++j)
{int wnod=a[pmin][j].nod,wcost=a[pmin][j].cost;
if(d[wnod] > d[pmin]+wcost) d[wnod] = d[pmin]+wcost;
}
}
}
void write()
{for( int i = 2; i <= n; ++i ) g<<(d[i] == inf ? 0 : d[i])<<' ';
g<<'\n'; g.close();
}