let Arr2 = [
[0, 1, 0, 0, 0, 1, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 1, 0, 1, 0, 1, 1, 1],
[0, 0, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 1, 0, 1, 0, 0],
[0, 1, 1, 1, 0, 0, 0, 0, 0],
]
let numVertexes = 9, //定义顶点数
numEdges = 14; //定义边数
function MGraph() {
this.vexs = []; //顶点表
this.arc = []; // 邻接矩阵,可看作边表
this.numVertexes = null; //图中当前的顶点数
this.numEdges = null; //图中当前的边数
}
let G = new MGraph()
function createGraph() {
G.numVertexes = numVertexes
G.numEdges = numEdges
for (let i = 0; i < G.numVertexes; i++) {
G.vexs.push(String.fromCharCode(65 + i))
}
for (let i = 0; i < G.numVertexes; i++) {
let arr = []
for (j = 0; j < G.numVertexes; j++) {
arr.push(Arr2[i][j])
}
G.arc.push(arr)
}
}
createGraph()
let visited = new Array(G.numVertexes).fill(false)
function DFS(i) {
visited[i] = true
// console.log('打印顶点:', G.vexs[i])
for (let j = 0; j < G.numVertexes; j ++) {
if(G.arc[i][j] === 1 && !visited[j]) {
console.log(`${G.vexs[i]} -> ${G.vexs[j]}`)
DFS(j)
}
}
}
function DFSTraverse() {
visited = new Array(G.numVertexes).fill(false)
for (let i = 0; i < G.numVertexes; i ++) {
if (!visited[i]) {
DFS(i)
}
}
}
function BFSTraverse() {
let queue = []; //初始化队列
visited = new Array(G.numVertexes).fill(false)
for (let i = 0; i < G.numVertexes; i++) { //对每一个顶点做循环
if (!visited[i]) { //如果没有访问过就处理
visited[i] = true;
queue.push(i); //将此顶点入队列
while (queue.length != 0) { //当前队列不为空
queue.shift();
for (let j = 0; j < G.numVertexes; j++) {
//判断其他顶点若与当前顶点存在边且未访问过
if (G.arc[i][j] == 1 && !visited[j]) {
visited[j] = true;
console.log(`${G.vexs[i]} -> ${G.vexs[j]}`)
queue.push(j) //将此顶点放入队列
}
}
}
}
}
}
// DFSTraverse()
BFSTraverse()
console