Új hozzászólás Aktív témák

  • tomazin

    veterán

    Bajom a következő remélem tudja valaki miért csinálja ezt:
    Mélységi bejárást kell megcsinálni egy gráfon,és lépésenként kiírni.Mivel az algoritmus rekurziv nem tudtam megoldani,h gombnyomásra menjen,de gondoltam megfelel majd az is a kedves tantóbácsinak,h sleepeltetem,és akkor látszódik hogyan halad.(volt még olyan ötletem is,hogy csináltam egy while ciklust,aminek false-ra raktam a feltételét,és addig ment amig nem lett true,amit a formon gomnyomásra akartam kiváltani.Hat megfagyott.)
    Viszont azt csinálja,h kirakja a végén az egész gráfot,és nem irja ki lépésenként..lehet(valószinű),h én rontottam el vlmit,de nem találom :((
    A gráf megvalósitása:
    a panel amire rajzolok a bejárás konstruktorában adom át,úgy hogy belül felveszek egy private panel p; majd a bejövő _p-t(amiben a form panelje van) simán értékül adom neki.
    p=_p;
    arra gondoltam,h itt lehet a baj,mert csak a bejáráson belülit változtatja,ami ugye nem a formon van.Viszont ha graphics-ot is átadtam,és az kirajzolja a panelra amit akarok..

    struct GrafElem
    {
    public GrafElem(int _index, int _mszam, int _bszam, int _szin)
    {
    mszam = _mszam;
    index = _index;
    bszam = _bszam;
    szin = _szin;
    }

    public int mszam;
    public int bszam;
    public int index;
    public int szin;
    }

    public List<GrafElem>[] grafElemek;

    public void MB(int kezd)
    {
    ++msz;
    bool elso = false;
    /*while (!mehet) ***ide gondoltam,h berakom azt a ciklust
    {
    }*/
    //mehet = false;

    seged = new GrafElem(g.grafElemek[kezd][0].index, msz, 0, 1);
    g.grafElemek[kezd][0] = seged; ****átirom a megnézett csucs szinet
    foreach (GrafElem ge in g.grafElemek[kezd]) ***összes lista
    {
    if (!elso) { elso = true; }***azért,h a lista elején álló elem(amire hivtuk)békénhagyja
    else
    {
    if (g.grafElemek[ge.index][0].szin==0)***a listában álló fehér csúcsokra
    {
    System.Threading.Thread.Sleep(1000);***aludjon 1mp-t
    szulok[ge.index] = kezd;***ki neki a szülöje(feszitofahoz)
    p.Refresh();***amit eddig változtattunk irja ki
    MB(ge.index);***nézze tovább a mélységit
    }
    }
    }
    ++bsz;
    seged = new GrafElem(g.grafElemek[kezd][0].index, g.grafElemek[kezd][0].mszam, bsz, 2); ***végeztünk a csúccsal fekete lesz
    g.grafElemek[kezd][0] = seged;


    Ha valaki van olyan türelmes és végignézi nagyon-nagy :R ,és kérhet egy apróságot is :B

    [Szerkesztve]

Új hozzászólás Aktív témák