Cod sursa(job #2392135)

Utilizator mariaa70Grigoras Ana mariaa70 Data 29 martie 2019 18:32:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <limits.h>
#include <fstream>

using namespace std;

const int maxn=5001;
const int maxm=250001;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

int minim(int *dist, bool *viz, int N)
{
    int dist_min=INT_MAX, poz;
    for(int i=0; i<N; i++)
        if(dist[i]<dist_min && !viz[i])
            dist_min=dist[i], poz=i;
    return poz;
}

int dijkstra(int **&graph,int N, int src)
{
    bool viz[N];
    int dist[N];
    for(int i=0; i<N; i++)
        viz[i]=false, dist[i]=INT_MAX;
    dist[src]=0;

    for(int count=0; count<N; count++)
    {
        /*int dist_min=INT_MAX, poz;
        for(int i=0; i<N; i++)
            if(dist[i]<dist_min && !viz[i])
                dist_min=dist[i], poz=i;*/
        int u=minim(dist,viz,N);

        viz[u]=true;
        for( int v=0; v<N; v++)
            if(!viz[v] && dist[v]> dist[u]+graph[u][v] && graph[u][v]!=0)
                dist[v]=dist[u]+graph[u][v];
    }

    for(int i=1; i<N; i++)
        out<<dist[i]<<" ";
}

int main()
{
    int N, M, x, y, p;
    in>>N>>M;
    int **graph=new int*[N];
    for(int i=0; i<N; i++)
    {
        graph[i]=new int[N];
        for(int j=0; j<N; j++)
            graph[i][j]=0;
    }
    while(M)
    {
        in>>x>>y>>p;
        graph[x-1][y-1]=graph[y-1][x-1]=p;
        M--;
    }
    dijkstra(graph,N,0);
    return 0;
}