visited

十、深度优先 && 广度优先

坚强是说给别人听的谎言 提交于 2020-08-06 23:38:46
原文地址 一、什么是“搜索”算法? 算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。 因为图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。 图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。 具体方法有很多,两种最简单、最“暴力”的方法为深度优先、广度优先搜索,还有A 、 IDA 等启发式搜索算法。 图有两种主要存储方法,邻接表和邻接矩阵。 以无向图,采用邻接表存储为例: public class Graph { // 顶点的个数 private int v; // 每个顶点后面有个链表 private LinkedList<Integer>[] adj; public Graph(int v) { this.v = v; adj = new LinkedList[v]; for (int i = 0; i < v; i++) { adj[i] = new LinkedList<>(); } } /** * 添加边 * @param s 顶点 * @param t 顶点 */ public void addEdge(int s,int t){ // 无向图一条边存两次(联想微信好友) adj[s].add(t); adj[t].add(s); } } 二、广度优先搜索(BFS)

迪杰斯特拉最短路径算法的java实现

血红的双手。 提交于 2020-08-05 13:32:28
      算法思想    以起始点为中心向外层层扩展,直到扩展到终点为止。   算法主要步骤    1.构建二维数组weight存储无向图,weight[i][j]表示节点i到节点j的权值,即节点i到节点j的距离(下文以d ij 表示)。    2.构建数组shortpath, 存储 起始节点(0)到各节点最短距离 ,即d 0j (j为所有节点),初始化 shortpath [0] = 0,其他值为无穷大。    3.构建数组visited,标记各节点是否已被扩展(假设0为为扩展,1为已扩展),初始化visited[0] = 1,其他值为零。    4.迭代算法,遍历二维数组weight,选择离起始节点距离最短的 未标记 结点k,将d 0k 记录至 shortpath ,并将k标记为已扩展, 通过k更新起始节点到其他各节点的距离 ,若d0j > d0k + dkj ,则d0j = d0k + dkj。    代码实现 public static int [] Dijsktra( int [][] weight, int start){ int length = weight.length; // 获取顶点个数 int [] shortPath = new int [length]; // 最短路径数组 shortPath[ 0] = 0; // String[] path =

react结合antd4.0和umi3.0的404界面

ぃ、小莉子 提交于 2020-07-29 06:11:03
import { Button, Result } from 'antd'; import React from 'react'; import { history } from 'umi'; // FC = Functional Component 使用这个类型有个好处就是,提醒你必须返回一个ReactNode // 在函数式组件中,无法像在类组件中一样使用state和生命钩子函数,但React提供了HOOK const NoFoundPage: React.FC < {} > = () => ( < Result status ={404} title ="404" subTitle ="Sorry, the page you visited does not exist." extra ={ <Button type ="primary" onClick ={() = > history.push('/')}> Back Home </ Button > } /> ); export default NoFoundPage; { path: '*', component: '@/pages/404' }, 来源: oschina 链接: https://my.oschina.net/u/4347380/blog/4292551

前端程序员学好算法系列(六)队列

雨燕双飞 提交于 2020-07-28 16:54:52
利用队列我们可以解决很多问题,js数组也可以实现队列,队列的思想为先近先出,js可以用 push和 shift() 很容易的实现一个队列 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[ 3 , 9 , 20 , null , null , 15 , 7 ], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [ 3 ], [ 9 , 20 ], [ 15 , 7 ] ] 解题: 1.root为空师返回 [] 2.定义队列为queue,默认在queue中传入root节点 3.我们记录一下当前节点的层级i,每次从队列头部取出一个节点,如果该节点有左右节点值就把左右节点都重新放入队列 4.res[res.length-1] 能帮我们取到当前操作的师哪层节点。 /* * * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /* * * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { let res = [

CSS 学习总结

▼魔方 西西 提交于 2020-07-28 13:47:10
CSS 学习总结 css简要介绍 什么是CSS css作用 css与HTML之间的关系 导入CSS的方式 CSS的基本使用规则 CSS语法 CSS样式表特征 CSS基础选择器 div+css布局 CSS基础样式 字体的设置 文本属性 盒子模型 浮动 元素 伪类 定位 精灵图 css简要介绍 什么是CSS css是层叠样式表 (Cascading Style Sheet),又叫级联样式表,简称样式表。 css作用 用于HTML文档中元素样式的定义。 实现了将内容与表现分离。 提高代码的可重用性和可维护性。 文件后缀是.css。 css与HTML之间的关系 HTML用于构建网页的结构 <!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 > 内容区域 </ body > </ html > CSS用于构建HTML元素的样式 HTML是页面的内容组成,CSS是页面的表现 结构层 HTML 表示层 CSS 行为层 JS 导入CSS的方式 内联方式

CSS选择器与最佳实践

别等时光非礼了梦想. 提交于 2020-07-26 21:48:33
原文: CSS选择器与最佳实践 有效且结构良好的文档为我们要应用的样式提供了一个框架,但将CSS样式应用于特定的HTML元素,需要找到该元素。在CSS中,执行该任务的样式规则称为选择器。在本文,你可以学习到: CSS选择器 CSS层叠和特殊性 CSS继承 CSS实践 现在一起开启CSS的奇妙之旅吧! 1. CSS选择器 CSS选择器包括 : 类型选择器 (也成为元素选择器),比如: p, ul, li, h1 等 后代选择器 (用于寻找特定元素或者元素组的后代,由其他两个选择器中间的空格表示)如下所示 ul a { color : red;} # 表示 ul 的后代的 a 元素, 其他 a 元素不受影响 ID选择器和类选择器 (分别用“#” 和"."表示) 伪类 ,如:link, :visited称为链接伪类,只应用于锚元素。:hover, :active, :focus被称为动态伪类,理论上可应用于任何元素(IE6只注意应用于锚元素的:link, :visited完全忽略:focus;IE7任何元素都支持:hover,但是忽略:active,:focus) 伪元素选择器 ,包括:before, :after,:first-letter,:first-line。 通用选择器 (*),其作用就像通配符,它匹配所有可用元素。 高级选择器 (IE6和更低版本不支持) 子选择器

CSS选择器:伪类(图文详解)

删除回忆录丶 提交于 2020-07-23 22:26:45
本文最初发表于 博客园 ,并在 GitHub 上持续更新 前端的系列文章 。欢迎在GitHub上关注我,一起入门和进阶前端。 以下是正文。 伪类(伪类选择器) 伪类 :同一个标签,根据其 不同的种状态,有不同的样式 。这就叫做“伪类”。伪类用冒号来表示。 比如div是属于box类,这一点很明确,就是属于box类。但是a属于什么类?不明确。因为需要看用户点击前是什么状态,点击后是什么状态。所以,就叫做“伪类”。 静态伪类和动态伪类 伪类选择器分为两种。 (1) 静态伪类 :只能用于 超链接 的样式。如下: :link 超链接点击之前 :visited 链接被访问过之后 PS:以上两种样式,只能用于超链接。 (2) 动态伪类 :针对 所有标签 都适用的样式。如下: :hover “悬停”:鼠标放到标签上的时候 :active “激活”: 鼠标点击标签,但是不松手时。 :focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点) PS:以上三种样式,只能用于超链接。 超链接a标签 超链接的四种状态 a标签有4种伪类(即对应四种状态),要求背诵。如下: :link “链接”:超链接点击之前 :visited “访问过的”:链接被访问过之后 :hover “悬停”:鼠标放到标签上的时候 :active “激活”: 鼠标点击标签,但是不松手时。 对应的代码如下:(不带注释) a:link

【LeetCode】BFS(共43题)

依然范特西╮ 提交于 2020-05-09 07:49:06
【101】Symmetric Tree 判断一棵树是不是对称。 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs。 // 这个题目的重点是 比较对象是 左子树的左儿子和右子树的右儿子, 左子树的右儿子和右子树的左儿子。不要搞错。 // 直接中序遍历的话会有错的情况,最蠢的情况是数字标注改一改。。 1 /* * 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 // 这个题目的重点是 比较对象是 左子树的左儿子和右子树的右儿子, 左子树的右儿子和右子树的左儿子。不要搞错。 11 // 直接中序遍历的话会有错的情况,最蠢的情况是数字标注改一改。。 12 class Solution { 13 public : 14 bool isSymmetric(TreeNode* left, TreeNode* right) { 15 if (left == NULL && right == NULL) { return

[LeetCode] 407. Trapping Rain Water II 收集雨水 II

大憨熊 提交于 2020-05-08 02:29:28
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note: Both m and n are less than 110. The height of each unit cell is greater than 0 and is less than 20,000. Example: Given the following 3x6 height map: [ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1] ] Return 4. The above image represents the elevation map [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] before the rain. After the rain, water is trapped between the blocks. The total volume of water trapped is 4. 42. Trapping Rain

Leetcode Lect2 BFS总结

…衆ロ難τιáo~ 提交于 2020-05-06 08:18:11
能够用 BFS 解决的问题,一定不要用 DFS 去做 因为用 Recursion 实现的 DFS 可能造成 StackOverflow (NonRecursion 的 DFS 一来你不会写,二来面试官也看不懂) 1. Queue Java常用的队列包括如下几种:     ArrayDeque:数组存储。实现Deque接口,而Deque是Queue接口的子接口,代表双端队列(double-ended queue)。     LinkedList:链表存储。实现List接口和Duque接口,不仅可做队列,还可以作为双端队列,或栈(stack)来使用。 C++中,使用<queue>中的queue模板类,模板需两个参数,元素类型和容器类型,元素类型必要,而容器类型可选,默认deque,可改用list(链表)类型。 Python中,使用collections.deque,双端队列 1 class MyQueue: 2 # 队列初始化 3 def __init__ (self): 4 self.elements = [] # 用list存储队列元素 5 self.pointer = 0 # 队头位置 6 7 # 获取队列中元素个数 8 def size(self): 9 return len(self.elements)- pointer 10 11 # 判断队列是否为空 12 def