Pagini recente » Cod sursa (job #2138959) | Cod sursa (job #1423049) | Cod sursa (job #1523663) | Cod sursa (job #1884257) | Cod sursa (job #821302)
Cod sursa(job #821302)
#include <fstream>
#include <vector>
#include <list>
//#include <pair>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,sursa,dest;
vector < pair<int,int> > vecini[50000]; int dist[50000];
list <int> coada;
list <int>::iterator it;
void adaugare(int x)
{
it=coada.begin(); it++;
for(;it!=coada.end();it++)
{
if(dist[*it]>dist[x]) {coada.insert(it,x); break;}
}
if(it==coada.end()) coada.push_back(x);
}
void schimbare(int x)
{
coada.remove(x);
adaugare(x);
}
void dijkstra()
{
while(!coada.empty())
{
int i,x; x=coada.front();
if(x==dest) {break;}
for(i=0;i<vecini[x].size();i++)
{
if(vecini[x][i].second+dist[x]<dist[vecini[x][i].first])
{
dist[vecini[x][i].first]=vecini[x][i].second+dist[x];
schimbare(vecini[x][i].first);
}
if(! dist[vecini[x][i].first] && vecini[x][i].first!=sursa)
{
dist[vecini[x][i].first]=vecini[x][i].second+dist[x];
adaugare(vecini[x][i].first);
}
}
coada.pop_front();
}
}
int main()
{
f>>n>>m;
int i,x,y,l,j;
for(i=0;i<m;i++)
{
f>>x>>y>>l;
vecini[x].push_back(make_pair(y,l));
// vecini[y].push_back(make_pair(x,l));
}
sursa=1;
for(i=2;i<=n;i++)
{
dest=i;
//f>>sursa>>dest;
coada.erase(coada.begin(),coada.end());
for(j=1;j<=n;j++) dist[j]=0;
coada.push_back(sursa);
dist[sursa]=0;
dijkstra();
g<<dist[dest]<<' ';}
}