Nu exista pagina, dar poti sa o creezi ...
Cod sursa(job #1391651)
| Utilizator | Data | 18 martie 2015 08:49:27 | |
|---|---|---|---|
| Problema | Algoritmul lui Dijkstra | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.03 kb |
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
queue <int> Q;
vector <pair<int,int> > nod[50500];
int dist[50500], visit[50500];
int n, m, i, x, y, c, go_to, now;
int main()
{
fin>>n>>m;
for ( i=1 ; i<=m ; i++ )
{
fin>>x>>y>>c;
nod[ x ].push_back(make_pair(y,c));
}
Q.push(1);
visit[1]=1;
while ( !Q.empty() )
{
now=Q.front(); Q.pop();
go_to=nod[ now ].size();
for ( i=0 ; i<go_to ; i++ )
{
if ( visit[ nod[ now ][ i ].first]==0 || dist[ nod[ now ][ i ].first]>dist[ now ]+nod[ now ][ i ].second )
{
Q.push( nod[ now ][ i ].first );
dist[ nod[ now ][ i ].first ] = dist[ now ] + nod[ now ][ i ].second;
visit[ nod[ now ][ i ].first ]=1;
}
}
}
fout<<dist[2];
for ( i=3 ; i<=n ; i++ )
fout<<" "<<dist[i];
return 0;
}
