コード例 #1
0
ファイル: Sema.cs プロジェクト: opak12/kratkiSpoj
        private void resiKonturu(List <Grana> backGrane, List <Cvor> backCvorovi)
        {
            List <Poteg> lista     = new List <Poteg>();
            Poteg        noviPoteg = new Poteg();

            foreach (Grana g in backGrane)
            {
                noviPoteg.superGrana.Add(g);
            }
            noviPoteg.izvor     = backCvorovi[0];
            backCvorovi[0].bot  = false;
            noviPoteg.odrediste = backCvorovi[0];
            foreach (Grana g in noviPoteg.superGrana)
            {
                foreach (Komponenta k in g.komponente)
                {
                    if (k.vrsta == Tip.strujniGenerator)
                    {
                        noviPoteg.struja = k.velicina;
                        goto dole;
                    }
                }
            }
            decimal eEkv     = 0;
            Cvor    pocCvor  = backCvorovi[0];
            Cvor    tmpCvor  = pocCvor;
            Grana   pocGrana = null;

            foreach (Grana g in backGrane)
            {
                if (g.izvor == pocCvor || g.odrediste == pocCvor)
                {
                    pocGrana = g;
                    break;
                }
            }
            bool  f        = false;
            Grana tmpGrana = pocGrana;

            while (f == false)
            {
                if (tmpGrana.izvor == tmpCvor)
                {
                    foreach (Komponenta k in tmpGrana.komponente)
                    {
                        if (k.vrsta == Tip.naponskiGenerator)
                        {
                            if (k.polaritet == tmpCvor)
                            {
                                eEkv += k.velicina;
                            }
                            else
                            {
                                eEkv -= k.velicina;
                            }
                        }
                    }
                    tmpCvor = tmpGrana.odrediste;
                    if (tmpCvor == pocCvor)
                    {
                        f = true;
                    }
                    foreach (Grana g in backGrane)
                    {
                        if ((g.izvor == tmpCvor || g.odrediste == tmpCvor) && g != tmpGrana)
                        {
                            tmpGrana = g;
                            break;
                        }
                    }
                }
                if (tmpGrana.odrediste == tmpCvor)
                {
                    foreach (Komponenta k in tmpGrana.komponente)
                    {
                        if (k.vrsta == Tip.naponskiGenerator)
                        {
                            if (k.polaritet == tmpCvor)
                            {
                                eEkv += k.velicina;
                            }
                            else
                            {
                                eEkv -= k.velicina;
                            }
                        }
                    }
                    tmpCvor = tmpGrana.izvor;
                    if (tmpCvor == pocCvor)
                    {
                        f = true;
                    }
                    foreach (Grana g in backGrane)
                    {
                        if ((g.izvor == tmpCvor || g.odrediste == tmpCvor) && g != tmpGrana)
                        {
                            tmpGrana = g;
                            break;
                        }
                    }
                }
            }
            noviPoteg.struja = eEkv * noviPoteg.izracunajAdmitansu();
dole:
            foreach (Grana g in noviPoteg.superGrana)
            {
                foreach (Komponenta k in g.komponente)
                {
                    if (k.vrsta == Tip.Otpornik)
                    {
                        k.snaga = noviPoteg.struja * noviPoteg.struja * k.velicina;
                    }
                }
            }
            lista.Add(noviPoteg);
            pot = lista;
        }
コード例 #2
0
ファイル: Sema.cs プロジェクト: opak12/kratkiSpoj
        private void kondenzuj(List <Cvor> cvori, List <Grana> granee)
        {
            List <Poteg> potezi = new List <Poteg>();

            for (int i = 0; i < granee.Count; i++)
            {
                if (granee[i].izvor.bot == false && granee[i].odrediste.bot == false)
                {
                    Poteg noviPoteg = new Poteg();
                    noviPoteg.superGrana.Add(granee[i]);
                    potezi.Add(noviPoteg);
                    granee.RemoveAt(i);
                }
            }
            bool flag = true;

            foreach (Grana g in granee)
            {
                flag = true;
                Poteg noviPoteg = null;
                if (g.obradjena == false)
                {
                    noviPoteg = new Poteg();
                    noviPoteg.superGrana.Add(g);
                    g.obradjena = true;
                }
                while (flag && noviPoteg != null)
                {
gore:
                    flag = false;
                    for (int i = 0; i < noviPoteg.superGrana.Count; i++)
                    {
                        foreach (Grana g1 in granee)
                        {
                            if (noviPoteg.superGrana[i] != g1 && imajuZajednickoTeme(noviPoteg.superGrana[i], g1))
                            {
                                noviPoteg.superGrana.Add(g1);
                                g1.obradjena = true;
                                flag         = true;
                                goto gore;
                            }
                        }
                    }
                }
                if (noviPoteg != null)
                {
                    potezi.Add(noviPoteg);
                }
            }
            foreach (Poteg p in potezi)
            {
                p.izracunajAdmitansu();
                p.namestiIzvorIOdrediste();
            }
            List <Cvor> finalniCvorovi = new List <Cvor>();
            int         brojac         = -1;

            foreach (Cvor c in cvori)
            {
                if (c.bot == false)
                {
                    c.indexer = brojac++;
                    finalniCvorovi.Add(c);
                }
            }
            napraviMatricuAdmitansi(finalniCvorovi, potezi);
        }