Cod sursa(job #1651094)

Utilizator ogyolobogyoloogyolo bogyolo ogyolobogyolo Data 12 martie 2016 07:22:02
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("ubuntuzei.in");
ofstream w("ubuntuzei.out");

int n, m, k, kt[16], nt[2000][2000], d[2000];

void beolvas() {
    int x, y, r;
    f>>n>>m>>k;
    //kt[0]=1;
    for (int i=0;i<=k;i++) f>>kt[i];
    for (int i=0;i<n;i++) for (int j=0;j<n;j++) nt[i][j]=0;
    for (int i=0;i<m;i++) {
        f>>x>>y>>r;
        nt[x-1][y-1]=r;
        nt[y-1][x-1]=r;
    }
}

void k0() {
    int min, mini1, mini2;
    bool b[n], kesz=false;
    for (int i=1;i<n;i++) {d[i]=nt[0][i];b[i]=false;}
    while (!kesz) {
            cout<<"m ";
        min=1001;
        mini1=n;
        for (int i=1;i<n;i++) {
            if (min>d[i] && !b[i] && d[i]!=0) {
                    min=d[i];
                    mini1=i;
            }
        }
        if (mini1!=n) {
            b[mini1]=true;
            min=1001;
            mini2=n;
            for (int i=0;i<n;i++) {
                if (min>nt[mini1][i] && nt[mini1][i]!=0 && !b[i]) {
                    mini2=i;
                    min=nt[mini1][i];
                }
            }
            if (mini2!=n && (d[mini1]+min<d[mini2] || d[mini2]==0)) d[mini2]=d[mini1]+min;
        }
        kesz=true;
        for (int i=1;i<n;i++) if (!b[i]) kesz=false;
    }
    w<<d[n-1]<<" ";
}

int main()
{
    beolvas();
    if (k==0) k0();
    //for (int i=0;i<n;i++) {for (int j=0;j<n;j++) cout<<nt[i][j]<<' '; cout<<"\n";}
    f.close();
    w.close();
}