Cod sursa(job #2860885)

Utilizator NedelcuCristianNedelcu Cristian NedelcuCristian Data 3 martie 2022 10:37:35
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
#include <fstream>
#include <vector>
#include <queue>

#define NMAX 1003
#define INF 1000000000000ll

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

struct varf {
int x, c;
};

vector <varf> G[NMAX];
int n, x0=1;
int c[NMAX][NMAX];
int d[NMAX];
int cmin[NMAX]={0, 100, 10, -10, 1, 23, 2};
int pre[NMAX];
bool uz[NMAX];

void citire();
void afisare();
void dijkstra();

class Compar
{
    public:
    bool operator() (int a, int b)
    {
    return cmin[a]>cmin[b];
    }
};
priority_queue<int, vector<int>, Compar> H;

int main()
{
    H.push(1);H.push(2);H.push(3);H.push(4);H.push(5);H.push(6);
    while (!H.empty())
        {
        fout<<cmin[H.top()];
        H.pop();
        }
    /*citire();
    dijkstra();
    afisare();
    return 0; */
}

void citire()
{
    int i, j, c, m;
    varf aux;
    fin>>n>>m;
    while (fin>>i>>j>>c)
        {
        aux.x=j;
        aux.c=c;
        G[i].push_back(aux);
        }
    for (i=1; i<=n; i++)
        cmin[i]=INF;
    cmin[x0]=0;
}

void dijkstra()
{
    int i, j, minim, vfmin;
    H.push(x0);
    for (i=1; i<=n; i++)
        {
        ///calculez vfmin
        vfmin=-1;
        while (!H.empty())
               {
                vfmin=H.top(); H.pop();
                if (!uz[vfmin])
                    break;
               }
        if (vfmin==-1)
            break;
        ///selectez vfmin
        uz[vfmin]=1;
        minim=cmin[vfmin];
        ///optimizez eventual costurile minime
        for (j=0; j<G[vfmin].size(); j++)
            if (!uz[G[vfmin][j].x] && cmin[G[vfmin][j].x]> minim + G[vfmin][j].c)
                {
                cmin[G[vfmin][j].x]= minim+G[vfmin][j].c;
                H.push(G[vfmin][j].x);
                }
        }

}

void afisare()
{
    int i, j, cnt;
    for (i=2; i<=n; i++)
        if (cmin[i]==INF)
            fout<< 0<<' ';
            else
                fout<<cmin[i]<<' ';

}