绪论
图分为有向图和无向图。
两种表达方式:
邻接列表:
邻接矩阵: 每行和每列表示一个节点,0代表没有连接,1代表有连接。
访问图中的节点需要使用遍历算法,遍历算法又分为广度优先搜索算法和深度优先搜索算法,主要用于确定目标节点和根节点之间的距离。
正文
<!DOCTYPE html>
<div lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>index</title>
<script src="js/jquery-2.2.4.min.js"></script>
<style>
</style>
</head>
<body>
</body>
<script>
$(document).ready(function () {
var graph = [
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
[1, 1, 0, 0, 0],
[0, 0, 0, 1, 0],
[0, 1, 0, 0, 0]
];
console.log(gdyx(graph, 1));
});
function gdyx(graph, root) {
var arr = [];
for (var i = 0; i < graph.length; i++) {
// 代表无限大
arr[i] = Infinity;
}
arr[root] = 0;
// 定义一个队列
var queue = [root];
var current;
while (queue.length != 0) {
// 取出数组头部元素
current = queue.shift();
var curConnected = graph[current];
var neighborIdx = [];
// 是否存在有连接的情况
var idx = curConnected.indexOf(1);
while (idx != -1) {
neighborIdx.push(idx);
// indexOf(检索元素,起始位置)
idx = curConnected.indexOf(1, idx + 1);
}
for (var j = 0; j < neighborIdx.length; j++) {
if (arr[neighborIdx[j]] == Infinity) {
arr[neighborIdx[j]] = arr[current] + 1;
queue.push(neighborIdx[j]);
}
}
}
return arr;
}
</script>
</div>
结果
虽然搬过来了,但是理解。
(若有什么错误,请留言指正,3Q)