Cod sursa(job #1326890)

Utilizator andreey_047Andrei Maxim andreey_047 Data 26 ianuarie 2015 09:51:36
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include<fstream>
#include<vector>
#include<queue>

using namespace std ;

struct nod
{
    int v, c;
};

struct Coord {
    int v, cost;
    bool operator < (const Coord& e) const
    {
        return cost > e.cost;
    }
};

vector<nod> L[50002];
int n, d[50002];
bool viz[50002];

priority_queue <Coord> q;

void Citire()
{
  unsigned int i, x, y, m, G, g, cost;
  nod w;
  ifstream fin("camionas.in");
  fin >> n >> m >> G;

  for (i = 1; i <= m; i++)
  {
    fin >> x >> y >> g;
    if (g < G) cost = 1;
        else cost = 0;
    w.c = cost;
    w.v = y;
    L[x].push_back(w);
    w.v = x;
    L[y].push_back(w);
  }
  fin.close();
}

void BellmanFord()
{
    int i;
    unsigned int j, dimm;
    nod w;
    Coord w1, w2;

    for (i = 2; i <= n; i++)
        d[i] = 100000000;
    d[1] = 0;
    viz[1] = true;
    w1.cost = 0;
    w1.v = 1;
    q.push(w1);
    while (!q.empty())
    {
        w1 = q.top();
        q.pop();
        viz[w1.v] = false;
        dimm = L[w1.v].size();
        for (j = 0; j < dimm; j++)
        {
            w = L[w1.v][j];
            i = w.v;
            //c = w.c;
            if (d[i] > d[w1.v] + w.c)
              {
                  w2.cost = d[i] = d[w1.v] + w.c;
                  w2.v = i;
                  if (!viz[i])
                  {
                        q.push(w2);
                        viz[i] = true;
                  }
              }
        }
    }
}

void Afisare()
{
    ofstream fout("camionas.out");
    //for (int i = 1; i <= n; i++)
    //    fout << d[i] << " ";
    //fout << "\n";
    fout << d[n] << "\n";
    fout.close();
}

int main()
{
    Citire();
    BellmanFord();
    Afisare();
    return 0;
}