• 16.图的深度搜索和广度搜索代码实现(JavaScript版)


    图的深度搜索和广度搜索

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            function Node(value){
                this.value = value;
                this.neighbor = [];
            }
    
            var nodeA = new Node("a");
            var nodeB = new Node("b");
            var nodeC = new Node("c");
            var nodeD = new Node("d");
            var nodeE = new Node("e");
            var nodeF = new Node("f");
            var nodeG = new Node("g");
            var nodeH = new Node("h");
    
            nodeA.neighbor.push(nodeB);
            nodeA.neighbor.push(nodeC);
            nodeB.neighbor.push(nodeA);
            nodeB.neighbor.push(nodeD);
            nodeB.neighbor.push(nodeF);
            nodeC.neighbor.push(nodeA);
            nodeC.neighbor.push(nodeD);
            nodeC.neighbor.push(nodeG);
            nodeD.neighbor.push(nodeB);
            nodeD.neighbor.push(nodeC);
            nodeD.neighbor.push(nodeE);
            nodeE.neighbor.push(nodeD);
            nodeE.neighbor.push(nodeF);
            nodeE.neighbor.push(nodeG);
            nodeF.neighbor.push(nodeB);
            nodeF.neighbor.push(nodeE);
            nodeF.neighbor.push(nodeH);
            nodeG.neighbor.push(nodeC);
            nodeG.neighbor.push(nodeE);
            nodeG.neighbor.push(nodeH);
            nodeH.neighbor.push(nodeF);
            nodeH.neighbor.push(nodeG);
    
            //图的深度优先搜索
            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);//将该节点添加到已经遍历的节点中
                var result = false;//默认没有目标节点
                for(var i = 0; i < node.neighbor.length; i++){
                    result |= deepSearch(node.neighbor[i], target, path);//在所有分支上寻找目标节点
                }
    
                return result ? true : false;
            }
    
            console.log(deepSearch(nodeB, "i", []));
    
            //图的广度优先搜索
            function breadthSearch(nodes, target, path){
                if(nodes == null || nodes.length == 0) return false;
                var neighbor = [];
                for(var i = 0; i < nodes.length; i++){//循环所有下一层节点
                    if(path.indexOf(nodes[i]) > -1) continue;//该节点已遍历,返回
                    if(nodes[i].value == target) return true;//找到了目标节点
                    path.push(nodes[i]);//将该节点放入已遍历节点中
                    neighbor = neighbor.concat(nodes[i].neighbor);//将该节点的邻居节点放入数组中
                }
    
                return breadthSearch(neighbor, target, path);//搜索下一层节点
            }
    
            console.log(breadthSearch([nodeA], "i", []));
        </script>
    </body>
    </html>
    图的深度和广度优先搜索
  • 相关阅读:
    如何设置IIS实现无扩展名重写
    正则表达式基础知识
    Literal控件用法
    ajaxPro.dll基础教程
    PetShop的系统架构设计
    SQL点滴29—错误无处不在
    javascript中的正则表达式
    为什么开发环境如此之乱
    SQL点滴文章总结
    javascript读写cookie
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/13226411.html
Copyright © 2020-2023  润新知