Cod sursa(job #401631)

Utilizator APOCALYPTODragos APOCALYPTO Data 22 februarie 2010 23:25:30
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
// de facto este Bellman-Ford

#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define foreach(v)   for(typeof (v).begin() it=(v).begin();it!=(v).end();it++)
#define oo 0x3f3f3f3f
struct nod_{
    int nod,lg;
};
vector<nod_> G[50005];
queue<int> q;
vector<int> dist(50005);
vector<int> isinq(50005);

int m,n;


inline void citire()
{int i,x,y,z;
    ifstream fin("dijkstra.in");
    fin>>n>>m;
    for(i=1;i<=m;i++)
      {fin>>x>>y>>z;
      G[x].push_back((nod_){y,z});
      G[y].push_back((nod_){x,z});
      }
      fin.close();
}


int main()
{int i,u;
    citire();
    q.push(1);
    dist[1]=0;
    isinq[1]=1;
    for(i=2;i<=n;i++)
      dist[i]=oo;

    while(!q.empty())
    {
        u=q.front();
        q.pop();
        isinq[u]=0;
        foreach(G[u])
        {

               if(dist[u]+it->lg<dist[(*it).nod])
               {dist[it->nod]=dist[u]+it->lg;


               if(isinq[it->nod]==0)
               {q.push(it->nod);
               isinq[it->nod]=1;
               }
               }
        }
    }
    ofstream fout("dijkstra.out");
    for(i=2;i<=n;i++)
    fout<<dist[i]<<" ";
    fout.close();

    return 0;
}