Cod sursa(job #1436059)

Utilizator vlad.olaruOlaru Andrei Vlad vlad.olaru Data 14 mai 2015 22:54:31
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream f("intrare.txt");
ofstream g("iesire.txt");

int n, m, costuri[100], M[100], p[100];
int a[100][100];

void citire()
{   f >> n >> m;
	int x, y, cost, i;
	for (i = 1; i <= m; i++)
            {f >> x >> y >> cost;
		     a[x][y] = cost;
		     a[y][x] = cost;}

    int j = 1;

	for (i = 1; i <= n; i++)
             {if (a[j][i])
                   costuri[i] = a[j][i];

              else costuri[i] = 32000;

              M[i] = 1;
              p[i] = j;}

	M[j] = 0;
	p[j] = 0;
	f.close();
}

void rezolva()
{
	int i;
	for (int j = 1; j < n; j++)
	{
		int aux = 32000, minv = -1;
		for (i = 1; i <= n; i++)
		        if (M[i] && aux>costuri[i])
	                  	{aux = costuri[i];
	                  	 minv = i;}
		M[minv] = 0;
		for (i = 1; i <= n; i++)
		            if (M[i] && a[minv][i]<costuri[i] && a[minv][i])
		                         {p[i] = minv;
		                          costuri[i] = a[minv][i];}
	}
}

void afisare(int j)
{
	int i;
	for (i = 1; i <= n; i++)
	       if (i != j && a[p[i]][i])
                  	g<< p[i] << " " << i << "\n";
	g.close();
}

int main()
{
	citire();
	rezolva();
	afisare(1);
	return 0;
}