Jak [zawinąć]? pętle foreach.

0

Witam mam następujący problem z kodem:

 public int FuncHeu(int id, string doc)
        {
            foreach (var d in Graf.Where(d => id == d.Id))
            {
                if (d.Stan == doc)
                    return 0;

                foreach (var a in Graf.Where(a => a.Parent == d))
                {
                    if (a.Stan == doc)
                        return 1;

                    foreach (var b in Graf.Where(b => b.Parent == a))
                        {
                        if (b.Stan == doc)
                            return 2;

                        foreach (var c in Graf.Where(c => c.Parent == b))
                            {
                            if (c.Stan == doc)
                                return 3;
                            }
                        }
                    }
            }
            return Graf.Count();
        }

Kod działa idealnie dla drzewa o głębokości 4, natomiast sypie się kiedy drzewo jest głębsze z oczywistych względów.
Moje pytanie jest następujące w jaki sposób mogę przerobić tą funkcję, aby tworzyła[?] tyle pętli foreach ile jest wierzchołków w grafie? :O. Chciałbym, aby mój program był bardziej uniwersalny. Z góry dziękuję.

0

Zaplanuj algorytm rekursywnie ;)

0

Albo rekurencja, albo kolejka do której dodajesz wierzchołki do odwiedzenia.

http://www.algorytm.org/algorytmy-grafowe/przeszukiwanie-grafu-wszerz-bfs-i-w-glab-dfs.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1