function Git( matrix , versionA , versionB ) {
const n = matrix.length
// 将string转换为数组更改数组。。。。
for(let i = 0; i < n; i++) {
matrix[i] = matrix[i].split('').map(Number)
}
// father数组记录当前节点的父元素
const father = new Array(n).fill(0)
// level数组记录当前节点的层级,0为0层
const level = new Array(n).fill(0)
const q = new Array()
// BFS遍历每个元素
q.push(0)
while (q.length > 0) {
// 遍历行数
let index = q.shift()
for (let i = 1; i < n; i++) {
if (matrix[index][i] === 1) {
father[i] = index
matrix[i][index] = 0
level[i] = level[index] + 1
q.push(i)
}
}
}
while (level[versionA] > level[versionB]) {
versionA = father[versionA]
}
while (level[versionA] < level[versionB]) {
versionB = father[versionB]
}
// 如果两个节点位于同一侧
if (versionA === versionB)
return versionA
// 如果两个节点位于不同侧
while (father[versionA] !== father[versionB]) {
versionA = father[versionA]
versionB = father[versionB]
}
return father[versionA]
}
module.exports = {
Git : Git
};