JavaScript的深度优先搜索 [英] JavaScript Depth-first search

查看:148
本文介绍了JavaScript的深度优先搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在JavaScript执行DFS,但我有一个小问题。这是我的算法类:

I am trying to implement DFS in JavaScript but I am having a little problem. Here is my Algorithm class:

"use strict";

define([], function () {

    return function () {

        var that = this;

        this.search = function (searchFor, node) {
            if (searchFor === node.getValue()) {
                return node;
            }
            var i, children = node.getChildren(), child, found;
            for (i = 0; i < children.length; i += 1) {
                child = children[i];
                found = that.search(searchFor, child);
                if (found) {
                    return found;
                }
            }
        };

    };

});

从而重新$ P $我Node类psents图中的一个节点

My Node class which represents a single node in the graph:

"use strict";

define([], function () {

    return function (theValue) {
        var value = theValue,
            children = [];

        this.addChild = function (theChild) {
            children.push(theChild);
        };

        this.hasChildren = function () {
            return children.length > 0;
        };

        this.getChildren = function () {
            return children;
        };

        this.getValue = function () {
            return value;
        };
    };

});

我创建这样的树:

I create a tree like this:

"use strict";

define(["DFS/Node", "DFS/Algorithm"], function (Node, Algorithm) {

    return function () {

        this.run = function () {
            var node1 = new Node(1),
                node2 = new Node(2),
                node3 = new Node(3),
                node4 = new Node(4),
                node5 = new Node(5),
                node6 = new Node(6),
                node7 = new Node(7),
                node8 = new Node(8),
                node9 = new Node(9),
                node10 = new Node(10),
                node11 = new Node(11),
                node12 = new Node(12),
                dfs = new Algorithm();

            node1.addChild(node2, node7, node8);
            node2.addChild(node3, node6);
            node3.addChild(node4, node5);
            node8.addChild(node9, node12);
            node9.addChild(node10, node11);

            console.log(dfs.search(5, node1));
        };

    };

});

我看未定义在日志中。我不知道为什么我的code是停在4,而不是持续的。

I see undefined in the logs. I am not sure why my code is stopping at 4 and not continuing.

推荐答案

现在的问题是你的的addChild()方法只需要一个参数,但你传递的多个节点给它。

The problem is your addChild() method only expects one parameter, but you are passing in multiple nodes to it.

更改您的通话code到:

Change your calling code to:

node1.addChild(node2);
node1.addChild(node7);
node1.addChild(node8);

node2.addChild(node3);
node2.addChild(node6);

node3.addChild(node4);
node3.addChild(node5);

node8.addChild(node9);
node8.addChild(node12);

node9.addChild(node10);
node9.addChild(node11);

或者,你可以改变的addChild接受多个孩子(可能要改名字太):

Or you can change addChild to accept multiple children (probably want to change the name too):

this.addChildren = function () {
    for (var i = 0; i < arguments.length; i++) {
        children.push(arguments[i]);
    }
};

这篇关于JavaScript的深度优先搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆