Cod sursa(job #1653274)

Utilizator nicu_89Lari Nicolae nicu_89 Data 15 martie 2016 20:39:25
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.97 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream f("graf.in");

struct varf
{
    int st;
    int dp;
    int su;
};

/*void Citeste(vector<int> graph[],int E)
{
    int v1,v2;

    for (int i = 1; i<=E; i++)
    {
        f >> v1 >> v2;
        graph[v1].push_back(v2);
        graph[v2].push_back(v1);
    }
} */

int main()
{

    int V,E, urm;
    f >> V >> E;

    //vector<int> graph[V];

    int vert[V][V];

    int v1,v2, pondere, totPond(0);

    for (int i = 0; i<V; i++)
        for (int j = 0; j<V; j++)
            vert[i][j] = 0;

    for (int i = 1; i<=E; i++)
    {
        f >> v1 >> v2 >> pondere;
        totPond += pondere;
        v1--; v2--;
        vert[v1][v2] = pondere;
        vert[v2][v1] = pondere;
    }



    int s, t;

    s = 0;
    t = 6;

    varf M[V];

    for (int i = 0; i<V; i++)
    {
        M[i].dp = totPond +1;
        M[i].st = 0;
        M[i].su = 0;
    }

    M[s].dp = 0;
    M[s].st = 1;
    M[s].su = s;

    urm = s;

  /* for (int i = 0; i<V; i++)
    {
        cout << endl;
        for (int j = 0; j<V; j++)
            cout << vert[i][j] << " ";
    }*/

    while (urm != -1)
    {
        for (int i = 0; i<V; i++)
        {
            if ((vert[urm][i] != 0) && (M[i].st!=2))
                if (M[i].dp > M[urm].dp + vert[urm][i])
            {
                M[i].dp = M[urm].dp + vert[urm][i];
                M[i].su = urm;
                M[i].st = 1;
            }
        }

        M[urm].st = 2;

        int temp  = -1;
        int dist = totPond + 1;

        for (int i = 0; i<V; i++)
        {
            if ((M[i].st == 1) and (M[i].dp < dist)) {
                temp = i;
                dist = M[i].dp;}
        }

        urm = temp;
    }


    for (int i=1; i<V; i++)
        if (M[i].dp == totPond+1)
            cout << "0";
        else
            cout << M[i].dp << " ";


}