В чем дело? Пытаясь построить дерево - PullRequest
1 голос
/ 11 февраля 2010

Вызов функции MakeTree(4, gameboard) не работает должным образом, он только печатает первые validMove-Nodes. Что я делаю не так?

private Move MakeTree(int depth, Board b)
    {

        Move Tree = GenerateValidMoves(b, b.MyLocation);
        if (depth == 0) return Tree;
        foreach (TreeNode<Move> Child in Tree.Children)
        {
            Board temp = Board.ApplyMove(b, Child.Value);
            Child.Children.Add(MakeTree(depth-1, temp));
        }
        return Tree;
    }

Дает мне следующий вывод:

[S 1|1, D: 2|1 (East)] Depth=1, Children =1
[] Depth=2, Children =0
[S 1|1, D: 1|2 (South)] Depth=1, Children =1
[]Depth=2, Children =0

Отображение каждого сгенерированного встроенного дерева дает мне следующий вывод:

[S 1|1, D: 2|1 (East)] Depth=1, Children =0
[S 1|1, D: 1|2 (South)] Depth=1, Children =0
[S 2|1, D: 3|1 (East)] Depth=1, Children =0
[S 2|1, D: 2|2 (South)] Depth=1, Children =0
[S 3|1, D: 4|1 (East)] Depth=1, Children =0
[S 3|1, D: 3|2 (South)] Depth=1, Children =0
[S 4|1, D: 5|1 (East)] Depth=1, Children =0
[S 4|1, D: 4|2 (South)] Depth=1, Children =0
[S 4|1, D: 5|1 (East)] Depth=1, Children =0
...

Так что, очевидно, он посещает только первый сгенерированный узел.

1 Ответ

0 голосов
/ 11 февраля 2010

вам нужно пройти через MakeTree. Попробуйте использовать синтаксис yield return и IEnumerable, это облегчит вашу жизнь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...