Cod sursa(job #903749)

Utilizator alin_iliciAlin Ilici alin_ilici Data 2 martie 2013 19:12:42
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

int minimul(int ok[], int noduri)
{
    int i,min;
    min=10000;
    for (i=1;i<=noduri;i++)
        if ((ok[i]<min)&&(ok[i]!=-1))
            min=ok[i];
    return min;
}

int poz_min(int dist[], int noduri, int min)
{
    int i,poz;
    for (i=1;i<=noduri;i++)
        if (dist[i]==min)
        {
            poz=i;
            break;
        }
    return poz;
}

void dijkstra (vector <int> vec[],vector <int> cost[], int start, int noduri)
{
    int dist[noduri+1],ok[noduri+1],i,j,k,min;
    ofstream g("dijkstra.out");
    for (i=1;i<=noduri;i++)
        if (i==start)
        {
            dist[i]=0;
            ok[i]=0;
        }
        else
        {
            dist[i]=10000;
            ok[i]=10000;
        }
    k=0;
    while (k<noduri)
    {
        min=minimul(ok,noduri);
        i=poz_min(dist,noduri,min);
        ok[i]=-1;
        for (j=0;j<vec[i].size();j++)
        {
            if (cost[i][j]+min<dist[vec[i][j]])
            {
                dist[vec[i][j]]=cost[i][j]+min;
                ok[vec[i][j]]=cost[i][j]+min;
            }
        }
        k=k+1;
    }
    for (i=1;i<=noduri;i++)
        g<<dist[i]<<" ";
}

int main()
{
    int noduri,muchii,i,a,b,c;
    ifstream f("dijkstra.in");
    f>>noduri>>muchii;
    vector <int> vec[noduri+1],cost[noduri+1];
    for (i=1;i<=muchii;i++)
    {
        f>>a>>b>>c;
        vec[a].push_back(b);
        cost[a].push_back(c);
    }
    dijkstra(vec,cost,1,noduri);
    return 0;
}