function Node(value) {
    this.value = value;
    this.neighbor = [];
}

let a = new Node("a");
let b = new Node("b");
let c = new Node("c");
let d = new Node("d");
let e = new Node("e");

a.neighbor.push(b);
a.neighbor.push(c);
b.neighbor.push(a);
b.neighbor.push(c);
b.neighbor.push(d);
c.neighbor.push(a);
c.neighbor.push(b);
c.neighbor.push(d);
d.neighbor.push(b);
d.neighbor.push(c);
d.neighbor.push(e);
e.neighbor.push(d);

// 深度搜索
function deepSearch(node, target, path) {
    if (node == null) {
        return false;
    }
    if (path.indexOf(node) > -1) {
        return false;
    }
    if (node.value == target) {
        return true
    }
    path.push(node);
    let result = false;
    for (let i = 0; i < node.neighbor.length; i++) {
        result |= deepSearch(node.neighbor[i], target, path);
    }
    return result ? true : false;
}

// console.log(deepSearch(b, 'a', []));


// 广度搜索
function bfs(nodes, target, path) {
    if (nodes == null || nodes.length == 0) {
        return false;
    }
    let nextNodes = [];
    for (let i = 0; i < nodes.length; i++) {
        if(path.indexOf(nodes[i]) > -1 ){
            continue;
        }
        path.push(nodes[i]);
        if (nodes[i].value == target) {
            return true;
        } else {
            nextNodes = nextNodes.concat(nodes[i].neighbor);
        }
    }
    return bfs(nextNodes, target, path);
}

console.log(bfs([c], 'n', []));

其他内容