js实现广度优先搜索和深度优先搜索

最近在学习算法,看了图解算法,但是感觉写的太简单,理论比较多,代码实现比较和例子比较少,看完后,又接着看了《啊哈!算法》,这个感觉例子比较多,也比较适合我这种算法入门的读者。

书上的例子一一打了一遍,因为作者是用c写的,而我是没接触过c,用了自己比较熟悉的js把例子打了一遍。用广搜写了贪吃蛇自动吃果实,只能吃100多个,自认为还能完善,于是等完善后在放在博客上面吧。

这里先写写用dfs(深搜) 和 bfs(广搜)算法实现 炸弹人的统计哪个点能消灭的怪物最多的算法

这里是地图,要求从3,3位置走,在那个地方消灭的怪物最多

在这里插入图片描述

这里是用bfs 完成目标的算法 ,基本上都有注释

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>炸弹人</title>
</head>
<body>
<script>
    function note(x,y){
        this.x = x;
        this.y = y;
    }
    var a = [
                ["#","#","#","#","#","#","#","#","#","#","#","#","#"],//1
                ["#","G","G",".","G","G","G","#","G","G","G",".","#"],//2
                ["#","#","#",".","#","G","#","G","#","G","#","G","#"],//3
                ["#",".",".",".",".",".",".",".","#",".",".","G","#"],//4
                ["#","G","#",".","#","#","#",".","#","G","#","G","#"],//5
                ["#","G","G",".","G","G","G",".","#",".","G","G","#"],//6
                ["#","G","#",".","#","G","#",".","#",".","#",".","#"],//7
                ["#","#","G",".",".",".","G",".",".",".",".",".","#"],//8
                ["#","G","#",".","#","G","#&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: function dfs(node) { if (!node) return; console.log(node.value); dfs(node.left); dfs(node.right); } // 示例 const tree = { value: 1, left: { value: 2, left: { value: 4, left: null, right: null, }, right: { value: 5, left: null, right: null, }, }, right: { value: 3, left: { value: 6, left: null, right: null, }, right: null, }, }; dfs(tree); ### 回答2: 深度优先搜索(DFS)是一种常用的图算法,可以用来遍历或搜索图的节点。下面是一个用JavaScript编写的深度优先搜索算法的例子: ```javascript class Graph { constructor(vertices) { this.vertices = vertices; this.adjList = new Map(); } addVertex(v) { this.adjList.set(v, []); } addEdge(v, w) { this.adjList.get(v).push(w); this.adjList.get(w).push(v); } DFSUtil(v, visited) { visited[v] = true; console.log(v); let neighbors = this.adjList.get(v); for (let neighbor of neighbors) { if (!visited[neighbor]) { this.DFSUtil(neighbor, visited); } } } DFS(v) { let visited = new Array(this.vertices).fill(false); this.DFSUtil(v, visited); } } let graph = new Graph(5); let vertices = [0, 1, 2, 3, 4]; for (let v of vertices) { graph.addVertex(v); } graph.addEdge(0, 1); graph.addEdge(0, 2); graph.addEdge(1, 3); graph.addEdge(2, 4); console.log("深度优先搜索结果:"); graph.DFS(0); ``` 该例子中,定义了一个`Graph`类表示图,构造函数接受一个整数参数`vertices`代表图中节点的个数。`adjList`是一个`Map`类型的属性,用于存储每个节点的邻接节点。`addVertex`方法用于添加节点,`addEdge`方法用于添加边。 `DFSUtil`是一个递归函数,用于实现深度优先搜索。它接受两个参数:当前节点`v`和一个`visited`数组,用于记录节点是否已经被访问过。首先将当前节点标记为已访问并输出该节点,然后遍历当前节点的邻接节点,如果邻接节点尚未访问,则递归调用`DFSUtil`函数。 `DFS`是外部调用的深度优先搜索函数,它接受一个起始节点`v`作为参数,创建一个`visited`数组用于记录节点是否被访问过,并调用`DFSUtil`函数进行搜索。 在例子中创建了一个包含5个节点的图,并添加了边。然后调用`DFS(0)`进行深度优先搜索,并输出搜索结果。 以上就是一个用JavaScript编写的深度优先搜索算法的例子。 ### 回答3: 深度优先搜索(DFS)是一种遍历或搜索树、图的算法。在使用 JavaScript 编写深度优先搜索算法时,我们可以使用递归。 深度优先搜索的基本思想是从起始节点开始,访问该节点,并尽可能深入搜索未访问过的节点。当搜索到达不能深入的节点时,则返回上一个节点,继续搜索未访问完的节点。 下面是使用 JavaScript 编写的深度优先搜索算法示例: ```javascript // 定义图的类 class Graph { constructor() { this.vertices = []; this.adjList = new Map(); } // 添加顶点 addVertex(v) { this.vertices.push(v); this.adjList.set(v, []); } // 添加边 addEdge(v, w) { this.adjList.get(v).push(w); this.adjList.get(w).push(v); } // 深度优先搜索 dfs(startingNode) { const visited = new Set(); // 记录已访问的节点 this.dfsHelper(startingNode, visited); } dfsHelper(v, visited) { visited.add(v); console.log(v); const neighbors = this.adjList.get(v); for (const neighbor of neighbors) { if (!visited.has(neighbor)) { this.dfsHelper(neighbor, visited); } } } } // 使用示例 const graph = new Graph(); // 添加节点和边 const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; for (const v of vertices) { graph.addVertex(v); } graph.addEdge('A', 'B'); graph.addEdge('A', 'C'); graph.addEdge('A', 'D'); graph.addEdge('C', 'D'); graph.addEdge('C', 'G'); graph.addEdge('D', 'G'); graph.addEdge('D', 'H'); graph.addEdge('B', 'E'); graph.addEdge('B', 'F'); graph.addEdge('E', 'I'); // 调用深度优先搜索算法 graph.dfs('A'); ``` 以上代码中,我们先定义了一个图的类 `Graph`,其中包含了添加顶点和边的方法。在 `dfs` 方法中,我们首先创建一个 `Set` 类型的集合 `visited`,用于记录已访问的节点。然后,我们调用 `dfsHelper` 方法开始进行深度优先搜索。在这个方法中,我们将当前节点标记为已访问,并打印出该节点。然后,我们遍历当前节点的所有邻居节点,如果邻居节点尚未访问,则继续递归调用 `dfsHelper` 方法。整个深度优先搜索的过程通过递归实现。 以上就是使用 JavaScript 编写的深度优先搜索算法的示例。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值