Pagini recente » Cod sursa (job #1906064) | Cod sursa (job #117875) | Cod sursa (job #2149177)
#include <iostream>
#include <fstream>
#include <limits>
#include <fstream>
#define NMAX 50005;
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
int a, b, c;
int am[NMAX][NMAX];
int dis[NMAX];
int visited[NMAX];
int dij(int x)
{
visited[x] = 1;
//update la celelalte noduri conectate cu nodul x
for(int i=1;i<=n;i++)
if((visited[i]==0) && (am[x][i]!=-1))
if((dis[x]+am[x][i]<dis[i])||(dis[i]==-1))
dis[i] = dis[x]+am[x][i];
int smaller = -1, sw = -1;
for(int i=0;i<=n;i++)
if((visited[i]==0)&&(dis[i]>=0)&&((sw>dis[i])||(sw==-1)))
{
sw = dis[i];
smaller = i;
}
if(smaller!=-1)
{
dij(smaller);
return 0;
}
return 0;
}
int main()
{
f>>n>>m;
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
am[i][j] = -1; //-1 -> nodul nu a fost vizitat
for(int i=0;i<=n;i++)
dis[i]=-1; //-1 = infinit
dis[1] = 0; // distanta de inceput
while(!f.eof())
{
f>>a>>b>>c;
am[a][b] = c; //distanta dintre cele 2 noduri
am[b][a] = c;
}
dij(1); //dijkstra de la primul nod
for(int i=2;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}