Cod sursa(job #2523151)

Utilizator AltexStefanButacu Stefan AltexStefan Data 13 ianuarie 2020 19:55:35
Problema Ubuntzei Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.74 kb
#include <bits/stdc++.h>
#define NMAX 2005
#define inf 1 << 30 -1
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int G[NMAX][NMAX];
int K,M,N;
vector <int>  Oras_Pr;
void citire()
{

    f>> N >> M;
    f >> K;
    for(int i =1 ; i <= K ;i++)
        {
            int pr;
            f >> pr;
            Oras_Pr.push_back(pr);
        }
    for(int i = 1; i <= N;i++)
        for(int j = 1 ; j <= N ; j++)
           if(i != j ) G[i][j] = inf;
           else G[i][j] = 0;

    for(int i = 1; i <= M ; i++)
    {
        int x,y,cost;
        f >> x >> y >> cost;
        G[x][y]= cost;
        G[y][x]= cost;
    }

}
void Roy_Floyd()
{
    int k,i,j;
    for(k = 1 ; k <= N ; k++)
    {
        for(i = 1 ; i <= N ; i++)
            for(j = 1 ; j <= N ;j++)
                if(G[i][j] > G[i][k] + G[k][j])
                    G[i][j] = G[i][k] + G[k][j];
    }
}
int cost_final;
void Parcurgere(int start)
{
    /// vezi costul cel mai mic al prietenului
    /// de pe linia start
    int cost_min = inf ;
    int next_nod= 0;
    int poz_pr_use;
    if(Oras_Pr.size())
        {
            for( int i = 0 ; i < Oras_Pr.size();i++)
            {
                if(G[start][Oras_Pr[i]] < cost_min)
                {
                    cost_min = G[start][Oras_Pr[i]];
                    poz_pr_use = i;
                    next_nod = Oras_Pr[i];
                }
            }
            cost_final += cost_min;
            Oras_Pr.erase(Oras_Pr.begin() + poz_pr_use);
            Parcurgere(next_nod);
        }
        else
            cost_final += G[start][N];
}
int main()
{
    citire();
    Roy_Floyd();
    Parcurgere(1);
    g<< cost_final;
    return 0;
}