# 创建类
这里使用了 ES6 中的 `面向对象` 的语法。
先实现类及添加顶点的功能。
## 添加顶点
![](https://img.kancloud.cn/b7/1b/b71b103422a13edc5033a00a7547e2ea_780x1426.png)
上面的代码实现了向图中添加一些顶点,但现在顶点还没有边。
接下来添加边:
## 添加边
![](https://img.kancloud.cn/7a/0c/7a0ce9d892e937a197d15bc0eca0842f_658x440.png)
测试:
![](https://img.kancloud.cn/62/c2/62c267f56007d45b3bf7610807059b1a_1610x1084.png)
## 广度优先遍历(BFS)
![](https://img.kancloud.cn/eb/e3/ebe370800564d819cf3841419ff1f1ee_740x1056.png)
测试:
![](https://img.kancloud.cn/96/10/9610e79f8bffb9010bf7aa895c247d5c_2040x1124.png)
结果:
![](https://img.kancloud.cn/a5/6f/a56f926fb4b4c7029b7ceca8ebb25981_294x254.png)
## 深度优先遍历(DFS)
可以使用 `栈` 或者 `递归` 还实现,以下是实现递归的实现方法:
![](https://img.kancloud.cn/bf/c0/bfc0c4ef537216af5352e20e4774ae18_922x1288.png)
结果:
![](https://img.kancloud.cn/9c/9b/9c9b9b2e5f0665047f1023dde06e2e4e_1942x870.png)
## 两个顶点之间的路径
### 在 BFS 时记录来路
修改 `BFS` 的代码,在遍历时,把每个顶点的上一个顶点(来路)记录下来:
![](https://img.kancloud.cn/3a/a0/3aa02d86184eacab8f53d8c3409d4232_1032x1290.png)
结果:
![](https://img.kancloud.cn/bc/6f/bc6f10acb015aaeda50db24546524a4c_2218x832.png)
### 反向找两个顶点之间的路径
![](https://img.kancloud.cn/26/d0/26d0fd59c50b8bf0ec4d5d4360543989_886x908.png)
结果:
![](https://img.kancloud.cn/58/38/58385dc3dda93596fbe6e8ed5a041f3d_2046x796.png)
## 拓扑排序