Informatika gyűjtemény

Egy szinttel feljebb tb_halozat.cs

2004050607080910

NézetNyomtat

tb_halozat.cs (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
using System;

namespace Kruskal
{
    struct El : IComparable
    {
        public int Csucs1, Csucs2, Suly;

        public int CompareTo(object obj)
        {
            return Suly - ((El) obj).Suly;
        }
    }

    class Program
    {
        const string InputFile  = "halozat1.be",
                     OutputFile = "halozat1.ki";

        int csucsokSzama, elekSzama;
        int osszSuly = 0;
        El[] elek;
        int[] szulo;

        private void Beolvas()
        {
            System.IO.StreamReader sr = new System.IO.StreamReader(InputFile);
            string[] sor;

            csucsokSzama = int.Parse(sr.ReadLine());
            elekSzama = csucsokSzama * (csucsokSzama - 1) / 2;

            elek = new El[elekSzama];
            szulo = new int[csucsokSzama];

            for (int i = 0; i < elekSzama; i++) {
                sor = sr.ReadLine().Split();
                elek[i].Csucs1 = int.Parse(sor[0]) - 1;
                elek[i].Csucs2 = int.Parse(sor[1]) - 1;
                elek[i].Suly   = int.Parse(sor[2]);
            }

            sr.Close();
        }

        private void Rendez()
        {
            Array.Sort(elek);
        }

        private int Os(int csucs)
        {
            while (szulo[csucs] != csucs)
                csucs = szulo[csucs];

            return csucs;
        }

        private bool VanUt(int csucs1, int csucs2)
        {
            return Os(csucs1) == Os(csucs2);
        }

        private void Felvesz(El el)
        {
            szulo[Os(el.Csucs1)] = Os(el.Csucs2);
        }

        private void FatKeszit()
        {
            int felvettDb = 0;

            for (int i = 0; i < csucsokSzama; i++)
                szulo[i] = i;

            for (int i = 0; i < elekSzama && felvettDb < csucsokSzama - 1; i++)
                if (!VanUt(elek[i].Csucs1, elek[i].Csucs2)) {
                    osszSuly += elek[i].Suly;
                    felvettDb++;
                    Felvesz(elek[i]);
                }
        }

        private void Kiir()
        {
            System.IO.StreamWriter sw = new System.IO.StreamWriter(OutputFile);

            sw.WriteLine(osszSuly);
            sw.Close();
        }

        private void Indit()
        {
            Beolvas();
            Rendez();
            FatKeszit();
            Kiir();
        }

        public static void Main(string[] args)
        {
            Program program = new Program();
            program.Indit();
        }
    }
}
(Vissza)