Cod sursa(job #1501448)

Utilizator NightSilentIridon Stefan NightSilent Data 13 octombrie 2015 14:56:27
Problema Arbore partial de cost minim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#define inf 30000
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int t[1001],d[1001];
int c[1001][1001];
bool u[1001];
int n,m,cost,nr;
struct
{
    int x,y;
}af[1001];
void citire()
{
    int i,x,y,cost,j;
    f>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            c[i][j]=inf;
    for (i=1;i<=m;i++)
        {
            f>>x>>y>>cost;
            c[x][y]=cost;
            c[y][x]=cost;
        }

}
void prim (int x)
    {
        int i,min,nod;
        for (i=1;i<=n;i++)
            {
                d[i]=c[x][i];
                t[i]=x;


            }
            u[x]=1;
        while (1)
            {
                min=inf;
                for (i=1;i<=n;i++)
                    if (!u[i] && d[i]<min)
                        {
                            min=d[i];
                            nod=i;
                        }
                if (min==inf) break;

                u[nod]=1;
                cost+=d[nod];
                nr++;
                af[nr].x=t[nod];
                af[nr].y=nod;
                for (i=1;i<=n;i++)
                    if (d[i]>c[nod][i])
                        {
                            d[i]=c[nod][i];
                            t[i]=nod;
                        }


            }//cout<<cost;
    }
int main()
{
    int i;
    citire();
    prim (2);
    g<<cost<<'\n'<<nr<<'\n';
    for (i=1;i<=nr;i++)
        g<<af[i].x<<" "<<af[i].y<<'\n';

    return 0;
}